/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Unikke felter
Fra : Henrik Stidsen


Dato : 16-02-04 18:05

Er det muligt at lave felter i en database (MySQL) der uafhængigt af
resten af tuplen skal være unikke for hele tabellen ?

Eksempel:
tabel foo:
felter: bar1, bar2, bar3, bar4, bar5

bar1 er primær nøgle og er derfor unik.
Sagen er så den at bar3 og bar5 også gerne skal være unikke - men
bar1 skal stadig være unik selvom bar3 skifter værdi (det kan altså
ikke være en sammensat nøgle!)

F.eks.
bar1 = værdi1
bar3 = hop
bar5 = poh

bar1 = værdi1
bar3 = poh
bar5 = hop

Den vil virke med den normal unique funktion - men det passer ikke
til det jeg skal bruge det til.
Er der andre metoder til det end at lave en search i databasen før
man tilføjer ?

Håber det er forståeligt...

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
http://såkadulæredet.dk/ => http://xn--skadulredet-x8as.dk/

 
 
Troels Arvin (16-02-2004)
Kommentar
Fra : Troels Arvin


Dato : 16-02-04 21:58

On Mon, 16 Feb 2004 17:04:38 +0000, Henrik Stidsen wrote:

> Den vil virke med den normal unique funktion - men det passer ikke til det
> jeg skal bruge det til.

Hvorfor ikke?

> Er der andre metoder til det end at lave en search i databasen før
> man tilføjer ?

Muligvis, muligvis ikke. Generelt er der i MySQL ret dårlige muligheder
for at beskrive constraints af forskellig art.

Din beskrivelse lugter lidt af, at der mangler noget normalisering af dine
tabeller, og hvis man forstår dine data bedre kan man måske foreslå en
metode, hvor du slipper for manuelt at søge i databasen inden
indsættelse.

> Håber det er forståeligt...

Det ville blive mere forståeligt, hvis dit eksempel var mere sigende.

--
Greetings from Troels Arvin, Copenhagen, Denmark


Henrik Stidsen (17-02-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 17-02-04 00:21

Troels Arvin <troels@arvin.dk> wrote in
news:pan.2004.02.16.20.57.39.521207@arvin.dk

>> Den vil virke med den normal unique funktion - men det passer
>> ikke til det jeg skal bruge det til.
>
> Hvorfor ikke?

Fordi unique tillader at 1 ud af f.eks. 3 felter er ændret - jeg har
brug for at ingen af dem må gå igen.

> Din beskrivelse lugter lidt af, at der mangler noget
> normalisering af dine tabeller, og hvis man forstår dine data
> bedre kan man måske foreslå en metode, hvor du slipper for
> manuelt at søge i databasen inden indsættelse.

Skal prøve at gøre det bedre.
Jeg har en opslagstavle hvor man kan smide lidt af hvert op på. Da
der er forskellige kategorier er der ind i mellem folk der poster den
samme post i flere kategorier.
Det resulterer i to næsten enslydene tupler:
<id1><navn><tidspunkt><tekst><kategori>
<id2><navn><tidspunkt><tekst><kategori>

id feltet er primærnøgle og bruges bl.a. til at referere til posten
på webinterfacet. Det er så teksten jeg gerne vil have skal være unik
i sig selv.
Så vidt jeg kan se mangler der ikke normalisering på tabellerne - en
normalisering vil jo blot skabe en ny tabel med f.eks. <id><tekst>
uden at løse problemet...

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
http://såkadulæredet.dk/ => http://xn--skadulredet-x8as.dk/

Mads Lie Jensen (17-02-2004)
Kommentar
Fra : Mads Lie Jensen


Dato : 17-02-04 09:12

On Mon, 16 Feb 2004 23:21:05 +0000 (UTC), Henrik Stidsen
<nospamforme@hs235.dk> wrote:

>Troels Arvin <troels@arvin.dk> wrote in
>news:pan.2004.02.16.20.57.39.521207@arvin.dk
>
>>> Den vil virke med den normal unique funktion - men det passer
>>> ikke til det jeg skal bruge det til.
>>
>> Hvorfor ikke?
>
>Fordi unique tillader at 1 ud af f.eks. 3 felter er ændret - jeg har
>brug for at ingen af dem må gå igen.

Hvorfor vil et unikt index på hvert enkelt kolonne ikke virke?

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/

Troels Arvin (17-02-2004)
Kommentar
Fra : Troels Arvin


Dato : 17-02-04 10:26

On Tue, 17 Feb 2004 09:11:54 +0100, Mads Lie Jensen wrote:

> Hvorfor vil et unikt index på hvert enkelt kolonne ikke virke?

Jeg tror Henrik mener, at en værdi skal være unik i en kolonne, der kan
tænkes som værende fællesmængeden af flere forskellige kolonner.

--
Greetings from Troels Arvin, Copenhagen, Denmark


Henrik Stidsen (17-02-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 17-02-04 15:56

Mads Lie Jensen <mads@gartneriet.dk> wrote in
news:65j330db09nq6mthj0q76of28os80rtshj@4ax.com

>>Fordi unique tillader at 1 ud af f.eks. 3 felter er ændret - jeg
>>har brug for at ingen af dem må gå igen.
>
> Hvorfor vil et unikt index på hvert enkelt kolonne ikke virke?

Hvis jeg har en primær nøgle og et unique felt vil blot det ene af
dem skulle ændres for at en ny tuple godkendes af databasen. Det er
IKKE det jeg vil opnå.
Det jeg vil opnå er hvad der svarer til to uafhængige primærnøgler i
samme tabel. Altså et felt der skal være unikt i sin kolonne således
at der ikke kan tilføjes to poster med samme tekst, eller to brugere
med samme email eller tlf nummer.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
http://såkadulæredet.dk/ => http://xn--skadulredet-x8as.dk/

Mads Lie Jensen (17-02-2004)
Kommentar
Fra : Mads Lie Jensen


Dato : 17-02-04 19:11

On Tue, 17 Feb 2004 14:56:10 +0000 (UTC), Henrik Stidsen
<nospamforme@hs235.dk> wrote:

>>>Fordi unique tillader at 1 ud af f.eks. 3 felter er ændret - jeg
>>>har brug for at ingen af dem må gå igen.
>>
>> Hvorfor vil et unikt index på hvert enkelt kolonne ikke virke?
>
>Hvis jeg har en primær nøgle og et unique felt vil blot det ene af
>dem skulle ændres for at en ny tuple godkendes af databasen. Det er
>IKKE det jeg vil opnå.
>Det jeg vil opnå er hvad der svarer til to uafhængige primærnøgler i
>samme tabel. Altså et felt der skal være unikt i sin kolonne således
>at der ikke kan tilføjes to poster med samme tekst, eller to brugere
>med samme email eller tlf nummer.

Altså, du vil undgå at flere poster kan have samme emailadresse - så
brug et unikt index på email-kolonnen - samme for telefonnr-kolonennen -
de behøver ikke at være primærnøgler - altså, ala:

CREATE TABLE bruger (
   id int not null,
   navn varchar(50),
   email varchar(100),
   telefon varchar(20),
   primary key(id)
);
CREATE UNIQUE INDEX i_bruger_telefon ON bruger (telefon);
CREATE UNIQUE INDEX i_bruger_email ON bruger (email);

Kan det ikke gøre som du vil have det til?
Nu skal både email og telefon være forskellig i alle poster.

(Indrømmet, jeg er ikke helt med på hvad du er ude på ....)

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/

Henrik Stidsen (18-02-2004)
Kommentar
Fra : Henrik Stidsen


Dato : 18-02-04 00:40

Mads Lie Jensen <mads@gartneriet.dk> wrote in
news:6ql430tg7d009o2klb052p3aoe8lvqb5do@4ax.com

> CREATE UNIQUE INDEX i_bruger_telefon ON bruger (telefon);
> CREATE UNIQUE INDEX i_bruger_email ON bruger (email);
>
> Kan det ikke gøre som du vil have det til?
> Nu skal både email og telefon være forskellig i alle poster.

Kanon, det var præcis det jeg skulle bruge!
Må ærligt indrømme at jeg ikke kendte til unique index funktionen.

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
http://såkadulæredet.dk/ => http://xn--skadulredet-x8as.dk/

Troels Arvin (17-02-2004)
Kommentar
Fra : Troels Arvin


Dato : 17-02-04 21:28

On Mon, 16 Feb 2004 23:21:05 +0000, Henrik Stidsen wrote:

> Jeg har en opslagstavle hvor man kan smide lidt af hvert op på. Da der er
> forskellige kategorier er der ind i mellem folk der poster den samme post
> i flere kategorier.
> Det resulterer i to næsten enslydene tupler:
> <id1><navn><tidspunkt><tekst><kategori>
> <id2><navn><tidspunkt><tekst><kategori>

Kan noget i stil med følgende ikke gøre det (ikke testet):

create table user(
user_id int auto_increment primary key,
fname varchar(100) not null,
lname varchar(100) not null
) type=innodb;

create table posting_category(
posting_category_id int auto_increment primary key,
label varchar(30) not null
) type=innodb;

create table posting(
posting_id int auto_increment primary key,
user_id int not null references user,
created timestamp not null,
posting_category_id int not null references posting_category,
content text not null
) type=innodb;

I ovenstående kan der knyttes netop én kategori til hvert opslag.

--
Greetings from Troels Arvin, Copenhagen, Denmark


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste