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());
248 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)