0

書籍の発行先のIDを含むBOOK_Issueテーブルを作成しています。私は列名を持っていますuser_idwitchにはtbl_studentとtbl_facultyからのIDが含まれます。したがって、2つの主キー列を参照してbook_issueテーブルのuser_idフィールドを設定する方法。

4

4 に答える 4

2

データベーススキーマが正しくありません。

一意のIDが必要な場合は、それらを1つのテーブルに含める必要があります。

すべてのユーザーを含むテーブルを作成し、ユーザーのタイプ(学生、教員)を設定するための列を作成できます。次に、タイプごとに2つの異なるテーブルを作成し、タイプに基づいてユーザーごとに適切な情報を提供します。

于 2009-11-24T05:03:53.850 に答える
0

タイプ「学生」またはタイプ「教員」のいずれかになる「個人」スーパークラスを作成します。代わりに表からこれを参照してください。BOOK_Issue

基本的に、この関係を作成するには、「学生」と「教員」の両方にまたがる 1 つの一意の ID が必要です。これをテーブル ( tbl_person?) に入れ、各行にこの新しいテーブルtbl_studentを参照させます。次に、両方にtbl_faculty存在するフィールドを引き出して、代わりにこの新しいスーパーテーブルに配置することもおそらく最善です。tbl_studenttbl_faculty

于 2009-11-24T04:39:30.153 に答える
0

この問題は、BOOK_Issue テーブルの user_id の横に追加の列を作成することで解決できます。この列は、これが学生 ID であるか教職員 ID であるかを示します。

別の方法として、ID 自体にその性質を示す何らかのパターンを容易に含めることができます (たとえば、すべての教員 ID が「UC」で始まるわけではなく、学生 ID のどれもがそうではありません)。

上記の 2 つのソリューションでは、次のようなクエリを使用できます。

SELECT B.*,
       CASE B.BorrowerType  -- could be LEFT(user_id, 2) etc...
          WHEN 'S' THEN S.Name
          WHEN 'F' Then F.Name
       END As Name,
       CASE B.BorrowerType 
          WHEN 'S' THEN S.PhoneNumber
          WHEN 'F' Then F.Phone    -- Note that these constructs allow
                                   -- mapping distinct columns names etc.
       END As PhoneNr
FROM BOOK_Issue B
LEFT JOIN tbl_student S ON B.BorrowerType = 'S' AND B.user_id = S.id
LEFT JOIN tbl_faculty F ON B.BorrowerType = 'F' AND B.user_id = F.id
WHERE B.DueDate  < '11/23/2009' -- or some other condition

学生/教職員テーブルから複数の列を取得する必要がある場合、これは少し重くなります。可能な代替手段はUNIONですが、これにより検索句が繰り返されます。

最後に、すべての DBMS で利用できるわけではありませんが、最善の解決策は、「IF B.BorrowerType = 'S'」条件によって駆動されるサブクエリです。

于 2009-11-24T04:53:12.717 に答える
0

これはあなたのテーブルデザインでなければなりません:

TeacherTable (FacultyID、FacultyName) StudentsTable (StudentID、StudentName、FacultlyID、...) BookTable (BookID、BookName、...) UsersTable(UserID、UserName、UserPassword、StudentID、LastLogin、...)

これが主なものです:

BookIssedTable(BookIssedID, BookID, UserID) //このテーブルは、「BookID の書籍が "UserID" のユーザーに発行されたことを示しています。//これは初期設計から大幅に改善されたため、改善される可能性があります。

于 2009-12-17T11:58:56.057 に答える