🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: dk.edb.database
Article #15308

1-M relation felt og anden tabel imellem

#15308
From: Ulrik Buchholtz
Date: Mon, 11 Jun 2001 20:22
69 lines
3687 bytes
Dette er nok et rimeligt hypotetisk (og rent teoretisk, for ikke at
sige langh�ret) sp�rgsm�l, men alligevel: hvordan konstrueres en
database, hvor et tilf�ldigt (alts� ikke et bestemt) felt kan have en
1-M relation med en tabel?

Normalt taler man om relationer tabeller imellem og felter imellem,
men ikke hvor felter i en tabel har en bestemt relation til en anden
tabel.

Problemet opst�r fx i den (hypotetiske?) situation, hvor alle
tekstfelter i en database skal v�re tilg�ngelige p� et vilk�rligt
antal sprog. Hvis det var to bestemte sprog kunne man have fx felt_en
og felt_da for hvert tekstfelt, men det g�r ikke, hvis der er mange
sprog, som man ikke kender p� designtidspunktet.

Jeg har forestillet mig noget a la f�lgende:

-- BEGIN SQL
CREATE TABLE string (
    string_id       INTEGER      NOT NULL PRIMARY KEY
);

CREATE TABLE language (
    language_id     INTEGER      NOT NULL PRIMARY KEY,
    code            CHAR(2)      NOT NULL CHECK (lower(code) = code),
    region          CHAR(2)      CHECK (lower(region) = region),
    name            INTEGER      NOT NULL REFERENCES string,
    UNIQUE(language_id, region)
);

CREATE TABLE string_language (
    string_id       INTEGER      NOT NULL REFERENCES string
                                 ON DELETE CASCADE,
    language_id     INTEGER      NOT NULL REFERENCES language
                                 ON DELETE CASCADE,
    string          TEXT         NOT NULL,
    PRIMARY KEY(string_id, language_id)
);

CREATE TABEL tabel (
    ...
    textfield       INTEGER      NOT NULL REFERENCES string,
    ...
);
-- END SQL

NB. Jeg ved godt, at 'TEXT'-typen ikke er defineret i SQL-92, men i
eksemplet ville en DBMS der havde den (eller lignende) nok v�re at
foretr�kke.

Problemet med ovenst�ende er (hvad jeg kan se):
  1. Det er grimt (IMHO). Hvorfor have en tabel med kun et felt.
  2. Forholdvist sv�rt at vedligeholde (vil jeg tro).
  3. D�rlig integritets-kontrol. Der er ingen kontrol med, at alle
     string-r�kker bliver refereret til af b�de en string_language og
     tabel.name.
  4. Det er enormt sv�rt at tr�kke data ud.

Kan nogen af jer komme p� et bedre bud p� en l�sning? Den skal v�re
liges� fleksibel p� den m�de at forst�, at alle tekstfelter skal
kunne forefindes p� et vilk�rligt antal sprog.

Der sp�rges ikke til hensyntagen til hastighed i f�rste omgang ;-)
En anden gang kan vi tage fuldtekst-s�gning i et vilk�rligt sprog i en
database a la denne p� 1TB!

-- 
Ulrik Buchholtz
Technical Details
Message-ID: <87zobekbrq.fsf@gmx.net>
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!nntp-relay.ihug.net!ihug.co.nz!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed00.sul.t-online.de!t-online.de!news.tele.dk!130.225.51.30!sunsite.dk!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: DANISH,ASCII
X-Google-Thread: fcdf9,8a0f54370a1d52a9,start
X-Google-Attributes: gidfcdf9,public
X-Google-ArrivalTime: 2001-06-11 13:21:40 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!nntp-relay.ihug.net!ihug.co.nz!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed00.sul.t-online.de!t-online.de!news.tele.dk!130.225.51.30!sunsite.dk!not-for-mail
From: Ulrik Buchholtz <ulrikb@gmx.net>
Newsgroups: dk.edb.database
Subject: 1-M relation felt og anden tabel imellem
Date: 11 Jun 2001 22:22:01 +0200
Organization: SunSITE.dk - Supporting Opensource Software
Lines: 69
Message-ID: <87zobekbrq.fsf@gmx.net>
NNTP-Posting-Host: 34.ppp1-10.worldonline.dk
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: sunsite.dk 992290877 1847 212.54.88.34 (11 Jun 2001 20:21:17 GMT)
X-Complaints-To: news@sunsite.dk
NNTP-Posting-Date: Mon, 11 Jun 2001 20:21:17 +0000 (UTC)
X-Authenticated: <anon>@<dk>
User-Agent: Gnus/5.0803 (Gnus v5.8.3) Emacs/20.7