SQL Tabellenbennenung

selberbauer

Captain
Registriert
Juni 2009
Beiträge
3.604
Hi,

Ich entwickle gerade ein Datenbankschema für die Kundenverwaltung, leider bin ich mir unsicher, was die Bennenung des Tabellennamens angeht.


Datenbankschema:
Code:
customers:
	customer_id
	first_name
	last_name
	birth

	address
		customers_address:
			address_id
			street
			street_nr
			zip_code
				zip_codes:
					zip_code
					city
			country
				countries:
					country_id
					name
		
	phonenumbers
		customers_phonenumbers:
			phone_id
			phonenumber
			type
				phone_types:
					type_id
					type (mobile, fax, private)
				 
	emails
		customers_emails:
			email_id
			email
			type
				email_types:
					type_id
					type

	professions
		customers_professions:
			profession_id
			profession
			category
			
	orders
		customers_orders:
			order_id
			products
			date
			cost
			state

Meine Fragen sind nun:
1. Wie würde es sich empfehlen first_name, last_name und birth zu normalisieren und in eine extra Tabelle zu setzen?
2. Sollte ich "customers_" als Prefix verwenden (auch wenn orders nicht mehr soviel mit den Kunden zu tun hat)?
3. Weitere Fehler in der Struktur?

Gruß,
selberbauer
 
1. Bloß nicht! Es ist jetzt schon viel zu viel des Guten! Mein Rat: Eine Tabelle Orders, so wie sie da steht und eine Tabelle Customers, wo alles restliche reinkommt. Datenkapselung gut und schön, aber du übertreibst es doch reichlich, musst haufenweise überflüssige Joins machen um nur an einen Kunden komplett heranzukommen. Zudem wirst du kaum so viele doppelte Einträge bekommen, dass es ansatzweise Sinn machen würde, hier zu kapseln, um somit Platz zu sparen.
2. Ich mag Präfixe überhaupt nicht. Wenn du Eindeutigkeit willst, nutze in den Queries Aliase zu Tabellen und sprich diese mit <alias>.<spaltenname> an. Aber jeder wie er es für richtig hält.
3. An sich nicht, aber siehe 1.
 
Hi,
1. Bloß nicht! Es ist jetzt schon viel zu viel des Guten! Mein Rat: Eine Tabelle Orders, so wie sie da steht und eine Tabelle Customers, wo alles restliche reinkommt. Datenkapselung gut und schön, aber du übertreibst es doch reichlich, musst haufenweise überflüssige Joins machen um nur an einen Kunden komplett heranzukommen. Zudem wirst du kaum so viele doppelte Einträge bekommen, dass es ansatzweise Sinn machen würde, hier zu kapseln, um somit Platz zu sparen.
Bis auf Namen und Geb. sind das alles eh ManyToMany relations, weswegen die so oder so ausgelagert werden müssten und da dachte ich, dann aber richtig :P
2. Eigentlich bin ich deiner Meinung, das Problem ist nur, dass ich mir Sorgen mache, dass sich etwas überschneiden könnte.
Ich habe bsw. noch eine Benutzertabelle, wo die Benutzerdaten gespeichert sind und da wären dann zwei Email-Tabellen von Nöten oder würdest du mir empfehlen alles in einer Tabelle zu speichern, also die Email, Telefon, etc. Daten von den benutzern und den Kunden zusammenzulegen?
 
Also spätestens bei PhoneType und EmailType hast du es etwas übertrieben, das sind nämlich bereits Metadaten und keine eigentlichen Nutzdaten mehr.
 
Das war so gedacht, damit ich die Types Tabelle fetchen kann und als <select>-Element ins HTML reinschleuse.
Wäre dies auch ohne MetaTabelle möglich?
 
Zurück
Oben