webForumDet fria alternativet

JOIN eller mix-/länk tabeller (fusk)?

Databaser & SQL

3 svar · 641 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#1

Håller på att skapa en databas över musik för en lokal förening.
Är lite osäker på hur strukturen för databasen ska vara.
Eftersom allt ska "länka" till allt. (svårt att förklara.) :r

# Samma "sångare" kan medverka på flera olika album/singlar.
# Kategorier (pop, rock m.fl.), artist, album/singel ska vara nästlade a.k.a vara länkade till varandra.

Vill givetvis att allt ska flyta på så bra som möjligt, både när det gäller att lägga till och ändra i databasen, men också så optimalt som möjligt.

Är det 1000 "JOINS" som gäller, eller är det ok att "fuska" med mix-/länk tabeller?

Tacksam för alla tips.
(Gärna också ett exempel på databas struktur.)

Medlem sedan juni 20006 031 inlägg
#2

Flyttas från PHP

Jag skulle använda mig av referens tabeller helt klart.

Medlem sedan juli 20041 271 inlägg
#3

Pedda skrev:

Jag skulle använda mig av referens tabeller helt klart.

Ok! Något exempel på databas struktur? :h

Medlem sedan juni 20006 031 inlägg
#4

Inte för att jag vet vilka fält du vill ha med, men det kan du ju fylla på själv.
Jag skulle nog gjort något sånt här:

# 
# Struktur för tabell 'artists'
# 
mysql_query("CREATE TABLE artists ( 
  	artId int(11) UNSIGNED NOT NULL auto_increment,
  	artname varchar(200) NOT NULL default '',
  	PRIMARY KEY  (artId) 
) TYPE=INNODB;") or die (mysql_error());

# 
# Struktur för tabell 'categories'
# 
mysql_query("CREATE TABLE categories ( 
  	catId int(11) UNSIGNED NOT NULL auto_increment,
  	catName varchar(200) NOT NULL default '',
  	PRIMARY KEY  (catId) 
) TYPE=INNODB;") or die (mysql_error());

# 
# Struktur för tabell 'albums'
#
mysql_query("CREATE TABLE albums ( 
	albId int(11) UNSIGNED NOT NULL auto_increment, 
	ref_artId int(11) UNSIGNED NOT NULL,
	ref_catId int(11) UNSIGNED NOT NULL,
    albName varchar(200) NOT NULL default '',
	PRIMARY KEY  (albId), 
	INDEX albumIndex (ref_artId),
	FOREIGN KEY (ref_artId) 
	REFERENCES artists(artId)
	ON DELETE CASCADE,
	INDEX categoriesIndex (ref_catId),
  	FOREIGN KEY (ref_catId) 
	REFERENCES categories(catId)
	ON DELETE CASCADE
) TYPE=INNODB;") or die (mysql_error());
256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)