Проектирование базы данных с использованием SQL Server 2005, - PullRequest
0 голосов
/ 06 июня 2011

У меня есть user таблица с userid (pk), password, usertype.

У меня есть другая таблица student с stdid (pk), stdname, stdaddress.

У меня есть третья таблица faculty с facid (pk), facname, facaddress.

Я хочу заполнить таблицу user pk из таблицы student или faculty.

Как реализовать это в SQL Server 2005.

Может ли кто-нибудь мне помочь?

Отредактировано ниже

В моей базе данных таблица студентов и преподавателей уже реализована как часть другого модуля.Мне нужно реализовать часть аутентификации по локальной сети, чтобы к ней можно было получить доступ откуда угодно, поэтому я не могу реструктурировать эту часть.Поэтому я использую таблицу пользователей с идентификатором пользователя (именем пользователя) и паролем в этой таблице.

Идентификатор пользователя либо stdid, либо facid, а также pk таблицы пользователя.

Ответы [ 3 ]

0 голосов
/ 06 июня 2011

Какие типы данных ключей? Есть ли гарантия того, что они будут уникальными для всех студентов и преподавателей?

Похоже, со временем будет сложно работать. Может быть, попробуйте перенести центральный фокус с таблиц "человек" на пользовательскую таблицу и назначить роли оттуда? Примерно так:

User
------
Id
Password
UserType
(where's the username?)

UserInfo
------
UserID
Name
Address

Role
------
Id
Name

UserRole
------
UserID
RoleID

(Таблица Role будет иметь как минимум две записи, одну с именем «Студент» и одну с именем «Факультет», но также может допускать большее количество ролей.)

Здесь есть несколько преимуществ:

  1. Вам нужно хранить имена и адреса только в одном месте, а не дублировать модель для разных ролей.
  2. Пользователь может иметь несколько ролей. Например, преподаватель может посещать некоторые занятия и какое-то время быть «студентом». Аспирант может преподавать некоторые классы и некоторое время быть «преподавателем».
  3. Новые роли могут быть добавлены без изменения модели данных.
0 голосов
/ 06 июня 2011

То, что у вас есть, это плохой дизайн.Вы не хотите использовать один или другой PK в качестве PK в таблице.Это не каждая работа.Что происходит, когда вы пытаетесь вставить ученика 10 (который является Джо Джонсом), но факультет 10 (Мэри Смит) уже находится в таблице.Что ж, вставка не удалась бы из-за уникального требования PK.

Если все учащиеся и преподаватели всегда являются пользователями, то userID является PK, а FacultyId и StudentID являются FK для этой таблицы, а не наоборот.

0 голосов
/ 06 июня 2011

вставить в user_table (выберите facid в качестве идентификатора пользователя из facultaty_table union, выберите stdid в качестве идентификатора пользователя в student_table)

это оставит пароль столбца и тип пользователя равным NULL, в противном случае он накачает userid_table всеми PK от других

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...