[...] ab wann muss oder sollte man das aufsplittern (sic!) in mehreren Tabellen.
Beim relationalen Datenbankdesign sollte man versuchen, gar keine Duplikate oder Redundanzen zu erhalten. Du kannst versuchen, kleinere Tabellen zu machen, ich habe mir immer einen Plan gezeichnet, sowas wie das hier:
Die Tabellen zu minimieren ist der komplizierte Schritt, das erfordert eine höhere Abstraktion. Die Verknüpfung der ID's sieht doch eigentlich schon gut aus, mache halt überall statt user_name eine User-ID, um das mit dem Update, Eintragung oder Löschen zu verknüpfen. In den relevanten Tabellen machst du Spalten wie: User-ID-create, User-ID-update, User-ID-closed usw...
Sollte ich dann z.b. den Ort und das Kundenprojekte in eine eigene Tabelle schreiben und anhand ID's "verknüpfen" sodass es in Ordnung wäre ?
Das wäre eine Möglichkeit, Tabelle Ort mit den Spalten ID, User-ID, Kunden-ID, Hersteller-ID, Ort-ID, Adresse, PLZ, Straße etc., damit könntest du die Orte von Projekten, Kunden und Usern verknüpfen... und entsprechend auch per Query selektiv oder allgemein abrufen.
Zum ORM:
Du bildest deine Datenbank in Python ab, keine Ahnung, ob das hier schon erwähnt wurde, habe nur den ersten und letzten Beitrag von dir gelesen.
Hier, so würde es aussehen, bezogen auf deinen ersten Beitrag hier im Thread:
Code: Alles auswählen
from sqlalchemy import create_engine, Column, Integer, String, Boolean, ForeignKey, Date
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
# Verbindung zur Datenbank herstellen
engine = create_engine('your_database_url')
Base = declarative_base()
class Customer(Base):
__tablename__ = 'customers'
id = Column(Integer, primary_key=True, autoincrement=True)
customer_id = Column(Integer, unique=True)
is_company = Column(Boolean)
is_favorite = Column(Boolean)
user_name = Column(String)
user_name_update = Column(String)
company = Column(String)
first_name = Column(String)
last_name = Column(String)
place = Column(String)
customer_projects = relationship('Project', back_populates='customer')
date_create = Column(Date)
date_update = Column(Date)
class Datanorm(Base):
__tablename__ = 'datanorm'
id = Column(Integer, primary_key=True, autoincrement=True)
qr_code = Column(String)
ean_code = Column(String)
user_name = Column(String)
user_name_update = Column(String)
sort_number = Column(Integer)
manufacturer_id = Column(Integer, ForeignKey('manufacturers.manufacturer_id'))
manufacturer = Column(String)
manufacturer_designation = Column(String)
manufacturer_designation_short = Column(String)
manufacturer_number = Column(String)
supplier_xyz_number = Column(String)
deactivated_xyz = Column(Boolean)
supplier_other_number = Column(String)
supplier_other_name = Column(String)
deactivated_other = Column(Boolean)
count = Column(Integer)
material_inventory = Column(Integer)
per_piece = Column(String)
purchasing_price = Column(Float)
selling_price = Column(Float)
update_price = Column(Date)
cutting = Column(Boolean)
inventory = Column(String)
inventory_lite = Column(String)
inventory_query = Column(String)
inventory_order_quantity = Column(Integer)
date_create = Column(Date)
date_update = Column(Date)
date_out = Column(Date)
class Manufacturer(Base):
__tablename__ = 'manufacturers'
id = Column(Integer, primary_key=True, autoincrement=True)
manufacturer_id = Column(Integer, unique=True)
user_name = Column(String)
user_name_update = Column(String)
manufacturer = Column(String)
area_from = Column(Integer)
area_to = Column(Integer)
in_use = Column(Boolean)
max_use = Column(Integer)
date_create = Column(Date)
date_update = Column(Date)
materials = relationship('Datanorm', back_populates='manufacturer')
class Material(Base):
__tablename__ = 'materials'
id = Column(Integer, primary_key=True, autoincrement=True)
datanorm_id = Column(Integer, ForeignKey('datanorm.id'))
customer_id = Column(Integer, ForeignKey('customers.customer_id'))
project_id = Column(Integer, ForeignKey('projects.project_id'))
user_name = Column(String)
user_name_update = Column(String)
sort_number = Column(Integer)
manufacturer_id = Column(Integer, ForeignKey('manufacturers.manufacturer_id'))
manufacturer = Column(String)
manufacturer_designation = Column(String)
manufacturer_designation_short = Column(String)
manufacturer_number = Column(String)
supplier_xyz_number = Column(String)
supplier_other_number = Column(String)
comment = Column(String)
count = Column(Integer)
count_interim_bill = Column(Integer)
selling_price = Column(Float)
update_price = Column(Date)
date_create = Column(Date)
date_update = Column(Date)
date_closed = Column(Date)
class Project(Base):
__tablename__ = 'projects'
id = Column(Integer, primary_key=True, autoincrement=True)
customer_id = Column(Integer, ForeignKey('customers.customer_id'))
project_id = Column(Integer, unique=True)
user_name = Column(String)
user_name_update = Column(String)
user_name_closed = Column(String)
customer_project = Column(String)
interim_bill = Column(Boolean)
closed = Column(Boolean)
date_create = Column(Date)
date_update = Column(Date)
date_closed = Column(Date)
customer = relationship('Customer', back_populates='customer_projects')
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, autoincrement=True)
device_id = Column(String)
name = Column(String)
mail = Column(String)
role = Column(String)
password = Column(String)
class Version(Base):
__tablename__ = 'version'
id = Column(Integer, primary_key=True, autoincrement=True)
file = Column(String)
version = Column(String)
build = Column(String)
file_stamp = Column(String)
update_needed = Column(Boolean)
update_price = Column(Integer)
# Die Tabellen erstellen
Base.metadata.create_all(engine)