WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Något hinder för DATE AS PRIMARY? (https://www.wn.se/forum/showthread.php?t=38581)

Tvartom 2009-08-19 09:46

Hej!
Håller på med databasdesign (MySQL) av ett tidssytem.
Ska knyta vissa objekt till specifika dagar.

Eftersom `mydays` bara ska finnas max en post per dag,
ska en date-kolumn ha ett unikt index.
Det fungerar uppenbarligen att ha date som primary,
min fråga är om det finns annan aspekt som gör att
att man ändå inte bör använda det så här?
Jag har nämligen aldrig sett detta någon annanstans.

Med date-kolumn som primary:
Kod:

CREATE TABLE mydays (
 id DATE NOT NULL,
 mylabel VARCHAR(45) NULL,
 PRIMARY KEY (id)
) ENGINE=InnoDB;

CREATE TABLE mydata (
 id INT NOT NULL AUTO_INCREMENT,
 dateid DATE NOT NULL,
 content VARCHAR(45) NULL,
 PRIMARY KEY (id),
 KEY (dateid),
 FOREIGN KEY (dateid) REFERENCES mydays (id)
) ENGINE=InnoDB;

Alternativet är att lägga ett separat unikt index:
Kod:

CREATE TABLE mydays2 (
 id INT NOT NULL AUTO_INCREMENT,
 myday DATE NOT NULL,
 mylabel VARCHAR(45) NULL,
 PRIMARY KEY (id),
 UNIQUE KEY (myday)
) ENGINE=InnoDB;

Vad anser ni?
/ Lasse

Jonas 2009-08-19 14:09

Ett ID på en post skall vara något unikt, och enbart användas för att kunna länka ihop olika data.
ID på en post skall inte behöva vara synligt för en användare/brukare.

Jag skulle rekommendera att du använder ett fält till med DATE & UNIQUE på istället. Eftersom du är ute efter något estetiskt.

Tvartom 2009-08-19 15:22

Tack för ditt svar Jonas.

Fördelarna jag ser är att jag kan söka i mydata-tabellen på datumintervall utan att behöva en join.
(Datastrukturen här är en stark förenkling av verkligheten då den även innehåller versionhantering, så jag har redan andra joinar.)

Anledningen till att jag har mydays är att jag kan vara säker på att det inte skapas poster med dagar i mydata som inte är definierade i mydays.

emilv 2009-08-20 08:11

Citat:

Originally posted by Tvartom@Aug 19 2009, 15:22
Anledningen till att jag har mydays är att jag kan vara säker på att det inte skapas poster med dagar i mydata som inte är definierade i mydays.
Använd foreign keys för det.


Alla tider är GMT +2. Klockan är nu 15:34.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson