2009-07-17 12 views
2

私はそれが良いと聞いて私のデータベースのテーブルの約を制限しようとしています(私は初心者のWeb開発者です)。私はユーザーがデータベースにリストを入力させたいと思っています。そこで、彼らはタイトル、全体的なコメントを入力して、リストを作成し始めます。私はどのように各リストのための新しいテーブルを作成せずにこれを行う方法を把握することはできません。たとえば、あるユーザーが44の値を持つリストを希望し、別のユーザーが10の値のリストを希望しているとします。私は各リストのための新しいテーブルを作ることなくこれを行う方法を考えることができません。私はあなたに私に与えることができる助け/洞察力に本当に感謝します。SQLデータベースの設計の助けが必要

答えて

5

基本的に、ユーザーリスト用のテーブルを作成する場合、テーブル内の各行は1つのユーザーのリストを参照し、別のテーブルはユーザーリスト値用です。ここで、テーブル内の各行には参照用の列がありますそれが属するリストと、ユーザーが入力した値の列。

0

あなたの表は次のようになります。 ユーザーID、 ListIDをint型、int型(主キー、一意識別子) タイトル、VARCHAR(250) コメント、VARCHAR(MAX)

Example Content: 
1 | 1 | The Title  | My Comment 
1 | 2 | The Other Title | My other comment 
2 | 3 | First Comment | Second Person, first comment 

Eacherユーザーはちょうど彼らを取得しますクエリからリスト:

選択ListID、TITEL、ユーザーID = @UserID

0

あなたが単一で逃げることができthe_Table からのコメントすべてのリストの行のテーブル、になってリストのテーブルで、たとえば単に

CREATE TABLE ListLines (
    listID INTEGER, 
    lineNo INTEGER, 
    line TEXT, 
    PRIMARY KEY (listID, lineNo), 
    FOREIGN KEY (listID) REFERENCES Lists 
); 

を言う:

CREATE TABLE Lists (
    listID INTEGER PRIMARY KEY, 
    userID INTEGER, 
    title TEXT, 
    comment TEXT, 
    FOREIGN KEY (userID) REFERENCES Users 
); 

あなたは、ユーザーごとの情報を主キーuserID INTEGERUsersテーブルを持っていると仮定すると(名、等)。だから、そのID与えられたリストのすべての行にあなただけの

SELECT line FROM ListLines 
WHERE listID=:whateverid 
ORDER BY lineNo; 

またはあなたを得るために

できUNIONは、例えばとタイトル:

SELECT title AS line FROM Lists 
WHERE listID=:whateverid 
UNION ALL 
SELECT line FROM ListLines 
WHERE listID=:whateverid 
ORDER BY lineNo; 

などです。この柔軟で効率的な配置は、物事を行うリレーショナルな方法です...

関連する問題