bearforever99 Ответов: 1

Помогите мне решить проблему с моим сценарием? pls


У меня есть проблема, мой сценарий, кажется, немного ошибается. Не могли бы вы починить мой сценарий ?

вот одна фотография:

http://s1042.photobucket.com/user/dao1001/media/1_zpsmkfzy4p1.png.html

и это создание 5 таблиц с правильными атрибутами и ограничениями здесь.

http://s1042.photobucket.com/user/dao1001/media/3_zpsobbnpbnm.jpg.html

и потом, после этого у меня есть еще кое-что...

Спасибо

Что я уже пробовал:

/* to create an employee table */

CREATE TABLE employee
(
	EmpId		char(2)		PRIMARY KEY,
	FirstName	varchar(20)	NOT NULL,
	LastName	varchar(20)	NOT NULL,
	Gender		char(2)		CHECK(gender IN ('M', 'F')),
	DateJoined	date		NOT NULL,
	DateLeft	date,
	Contract	varchar(4)	NOT NULL);

/* to create task table */

CREATE TABLE task
(
	TaskId		char(4)		PRIMARY KEY,
	TaskName	varchar(25)	NOT NULL,
	GivenDate	date		NOT NULL,
	StartDate	date,
	EndDate		date,
	MaxHours	number(3,1)	DEFAULT 20.0 NOT NULL);

/* to create computer table */

CREATE TABLE computer
(
	SerialNum	char(7)		PRIMARY KEY,
	Make		varchar(12)	NOT NULL,
	Model		varchar(20)	NOT NULL,
	ProcessorType	varchar(20)	NOT NULL,
	ProcessorSpeed	number(4,2)	NOT NULL,
	RAM		char(7),
	DiskSize	char(6));

/* to create job table */

CREATE TABLE job

(
	TaskId		char(4)		PRIMARY KEY, FOREIGN KEY,
	EmpId		char(2)		PRIMARY KEY, FOREIGN KEY,
	HoursSpent	number(3,1)	DEFAULT 20.0 NOT NULL);

/* to create employee computer table */

CREATE TABLE emp_computer
(
	SerialNum	char(7)		PRIMARY KEY, FOREIGN KEY,
	EmpId		char(2)		PRIMARY KEY, FOREIGN KEY,
	DateAssigned	date		NOT NULL,
	Notes		varchar(50));

Tomas Takac

Какое сообщение об ошибке вы получаете? Вы не можете создавать первичные и внешние ключи таким образом.

1 Ответов

Рейтинг:
8

Tomas Takac

Предполагая, что вы используете SQL Server. В вашем сценарии есть ряд проблем.
1) тип данных-это numeric(x,y) нет number(x,y)
2) Вы можете указать ограничение первичного ключа только один раз. Не используйте встроенное определение, если вам нужен составной первичный ключ.
3) ваши внешние ключи должны указывать целевую таблицу и столбец.
4) Используйте именованные ограничения, это избавит вас от многих неприятностей позже.

Вот как это должно выглядеть:

CREATE TABLE job
(
	TaskId		char(4) NOT NULL,
	EmpId		char(2) NOT NULL,
	HoursSpent	numeric(3,1) NOT NULL CONSTRAINT DF_job_HoursSpent DEFAULT (20.0),

	CONSTRAINT PK_job PRIMARY KEY (TaskId, EmpId),
	CONSTRAINT FK_job_task FOREIGN KEY (TaskId) REFERENCES task (TaskId),
	CONSTRAINT FK_job_empoyee FOREIGN KEY (EmpId) REFERENCES employee (EmpId)
);


bearforever99

Ограничение DF_job_HoursSpent DEFAULT (20.0), что имеется в виду? Я думаю, что он говорит: "должно быть от 0 до 40 из таблицы задач.

Tomas Takac

Это ваше ограничение по умолчанию, я просто добавил к нему имя. Ограничение по умолчанию, как следует из названия, предоставляет значение по умолчанию на случай, если вы не укажете значение для этого столбца во время вставки. Может быть, вы ищете контрольное ограничение? Прочтите документацию для Создать таблицу (Transact-SQL)[^].