Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка создания базы данных 
:(
    Опции темы
laent
Дата 21.5.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 21.5.2007

Репутация: 1
Всего: 1



Помогите пожалуйста найти ошибку, после 4 -ой таблицы.

Пишет это:
Код

Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'k_contract'.
 

Код


/* "ПРЕДПРИЯТИЯ" */
CREATE TABLE k_firm
(
    firm_num    NUMERIC(6)    IDENTITY PRIMARY KEY,
    firm_name    VARCHAR(100)    NOT NULL,
    firm_addr    VARCHAR(100),
)

INSERT INTO k_firm (firm_name, firm_addr)
    VALUES ('Ваз','Москва');
INSERT INTO k_firm (firm_name, firm_addr)
    VALUES ('Газ','Казань');
INSERT INTO k_firm (firm_name, firm_addr)
    VALUES ('Урал','Париж');
INSERT INTO k_firm (firm_name, firm_addr)
    VALUES ('Хонда','Лондон');
INSERT INTO k_firm (firm_name, firm_addr)
    VALUES ('Хёндай','Токио');
------------------------------------------
SELECT *FROM k_firm
-------------------

/* "ОТДЕЛЫ" */
CREATE TABLE k_dept
(
    dept_num    NUMERIC(6)    IDENTITY PRIMARY KEY,
    dept_short_name    VARCHAR(10)    NOT NULL,
    dept_full_name    VARCHAR(100),
    staff_num    NUMERIC(6)


INSERT INTO k_dept (dept_short_name, dept_full_name)
    VALUES ('Sales','Отдел продаж');
INSERT INTO k_dept (dept_short_name, dept_full_name)
    VALUES ('Mart','Отдел маркетинга');
INSERT INTO k_dept (dept_short_name, dept_full_name)
    VALUES ('Cust','Отдел гарантийного обслуживания');
----------------------------------------------
SELECT *FROM k_dept
-------------------

/* "СОТРУДНИКИ" */
CREATE TABLE k_staff
(
    staff_num    NUMERIC(10)    IDENTITY,
    staff_name    VARCHAR(30)    NOT NULL,
    staff_post    VARCHAR(30),
    dept_num    NUMERIC(6)    NOT NULL,
    staff_hiredate    DATETIME    NOT NULL,
    staff_termdate    DATETIME,
CONSTRAINT pk_staff_num    PRIMARY KEY (staff_num),
CONSTRAINT fk_staff_dept_num FOREIGN KEY (dept_num)
        REFERENCES k_dept (dept_num)
)

INSERT INTO k_staff (staff_name, dept_num, staff_hiredate, staff_post)
    VALUES ('Иванов', 1, GETDATE(),'Менеджер');
INSERT INTO k_staff (staff_name, dept_num, staff_hiredate, staff_post)
    VALUES ('Петров', 2, GETDATE(),'Продавец консультант');
INSERT INTO k_staff (staff_name, dept_num, staff_hiredate, staff_post)
    VALUES ('Сидоров', 3, GETDATE(),'Бухгалтер');
---------------------------------------------------
SELECT *FROM k_staff
--------------------

/* "ДОГОВОРЫ" */
CREATE TABLE k_contract
(
    contract_num    NUMERIC(6)    IDENTITY PRIMARY KEY,
    contract_date    DATETIME DEFAULT GETDATE(),
    contract_type    CHAR(1)
        CHECK (contract_type IN ('A','B','C')),
    firm_num    NUMERIC(6)    NOT NULL,
    staff_num    NUMERIC(6),
CONSTRAINT fk_contract_firm_num    FOREIGN KEY (firm_num)
        REFERENCES k_firm (firm_num),
CONSTRAINT fk_contract_staff_num FOREIGN KEY (staff_num)
        REFERENCES k_staff (staff_num)
)

INSERT INTO k_contract (contract_type, firm_num, staff_num)
    VALUES ('A', 1, 1);
INSERT INTO k_contract (contract_type, firm_num, staff_num)
    VALUES ('B', 2, 2);
INSERT INTO k_contract (contract_type, firm_num, staff_num)
    VALUES ('C', 3, 2);
INSERT INTO k_contract (contract_type, firm_num, staff_num)
    VALUES ('A', 1, 1);
INSERT INTO k_contract (contract_type, firm_num, staff_num)
    VALUES ('B', 2, 2);
INSERT INTO k_contract (contract_type, firm_num, staff_num)
    VALUES ('C', 3, 3);
INSERT INTO k_contract (contract_type, firm_num, staff_num)
    VALUES ('A', 1, 1);
---------------------------------------------------------
SELECT *FROM k_contract
------------------------

/* "СЧЕТА" */
CREATE TABLE k_bill
(
    bill_num    NUMERIC(6)    IDENTITY PRIMARY KEY,
    bill_date    DATETIME DEFAULT GETDATE(),
    bill_term    DATETIME DEFAULT GETDATE()+30,
    bill_peni    NUMERIC(6) DEFAULT 0,
    contract_num    NUMERIC(6),
CONSTRAINT fk_bill_contract_num    FOREIGN KEY (contract_num)
        REFERENCES k_contract (contract_num),
CONSTRAINT ch_bill_date    CHECK (bill_term-bill_date<91)
)

INSERT INTO k_bill (contract_num, bill_date, bill_sum)
    VALUES ( 1, GETDATE()-60, 1000);
INSERT INTO k_bill ( contract_num, bill_date, bill_sum)
    VALUES ( 2, GETDATE()-30, 1000);
INSERT INTO k_bill ( contract_num, bill_date, bill_sum)
    VALUES ( 3, GETDATE(), 2000);
INSERT INTO k_bill ( contract_num, bill_date, bill_sum)
    VALUES ( 1, GETDATE()-30, 6000);
INSERT INTO k_bill ( contract_num, bill_date, bill_sum)
    VALUES ( 2, GETDATE(), 1000);
INSERT INTO k_bill ( contract_num, bill_date, bill_sum)
    VALUES ( 3, GETDATE()-30, 2500);
INSERT INTO k_bill ( contract_num, bill_date, bill_sum)
    VALUES ( 1, GETDATE()-30, 1000);
INSERT INTO k_bill ( contract_num, bill_date, bill_sum)
    VALUES ( 1, GETDATE()-60, 1200);
INSERT INTO k_bill ( contract_num, bill_date, bill_sum)
    VALUES ( 2, GETDATE(), 1000);
-----------------------------------------------------
SELECT * FROM k_bill
--------------------


/* "ПЛАТЕЖИ" */
CREATE TABLE k_payment
(
    payment_num    NUMERIC(2) DEFAULT 0,
    bill_num    NUMERIC(6),
    payment_date    DATETIME DEFAULT GETDATE(),
    payment_sum    NUMERIC(9,2),
CONSTRAINT pk_payment_num PRIMARY KEY (payment_num, bill_num),
CONSTRAINT fk_payment_bill_num FOREIGN KEY (bill_num)
        REFERENCES k_bill (bill_num)
)

INSERT INTO k_payment (payment_num, bill_num, payment_sum)
    VALUES ( 2, 1, 1000);
INSERT INTO k_payment (payment_num, bill_num, payment_sum)
    VALUES ( 3, 2, 2000);
INSERT INTO k_payment (payment_num, bill_num, payment_sum)
    VALUES ( 1, 3, 6000);
INSERT INTO k_payment (payment_num, bill_num, payment_sum)
    VALUES ( 2, 2, 500);
INSERT INTO k_payment (payment_num, bill_num, payment_sum)
    VALUES ( 3, 2, 1500);
INSERT INTO k_payment (payment_num, bill_num, payment_sum)
    VALUES ( 1, 4, 1000);
INSERT INTO k_payment (payment_num, bill_num, payment_sum)
    VALUES ( 1, 3, 1200);
INSERT INTO k_payment (payment_num, bill_num, payment_sum)
    VALUES ( 2, 7, 1000);
---------------------------------------------------------
SELECT *FROM k_payment
-----------------------

/* "ПРАЙС-ЛИСТ" */ 
CREATE TABLE k_price
(
    price_num    NUMERIC(6) IDENTITY PRIMARY KEY,
    price_name    VARCHAR(100)    NOT NULL,
    price_sum    NUMERIC(9,2),
    type_num    NUMERIC(6)
)

INSERT INTO k_price (price_name, price_sum)
    VALUES ( 'Материализация духов', 500);
INSERT INTO k_price (price_name, price_sum)
    VALUES ( 'Раздача слонов', 1500);
INSERT INTO k_price (price_name, price_sum)
    VALUES ( 'Слоновий бивень', 1000);
INSERT INTO k_price (price_name, price_sum)
    VALUES ( 'Моржовый клык', 1200);
INSERT INTO k_price (price_name, price_sum)
    VALUES ( 'Копыто Пегаса', 1000);
------------------------------------------
SELECT *FROM k_price
--------------------


/* "ПРОТОКОЛЫ СЧЕТОВ" */ 
CREATE TABLE k_protocol
(
    price_num    NUMERIC(6)    NOT NULL,
    bill_num    NUMERIC(6)    NOT NULL,
    kolvo        NUMERIC(6)    NOT NULL,
    price_sum    NUMERIC(9,2),
CONSTRAINT pk_protocol_num PRIMARY KEY (price_num,bill_num),
CONSTRAINT fk_protocol_price_num FOREIGN KEY (price_num)
        REFERENCES k_price (price_num),
CONSTRAINT fk_protocol_bill_num FOREIGN KEY (bill_num)
        REFERENCES k_bill (bill_num)
)

INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 1,1,1, 500);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 2,2,3, 1500);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 2,4,4, 1000);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 1,2,2, 1200);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 2,1,4, 1000);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 2,3,2, 500);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 2,3,1, 1500);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 1,6,2, 1000);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 3,5,1, 1200);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 2,6,5, 1000);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 4,7,1, 1200);
INSERT INTO k_protocol (price_num, bill_num, kolvo, price_sum)
    VALUES ( 2,3,20, 1000);
-------------------------------------------------------------
SELECT *FROM k_protocol
------------------------
 
Базу пишу через SQL Query Analyzer.

Заранее спасибо.
PM MAIL   Вверх
chief39
Дата 21.5.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 8
Всего: 77



Похоже, у тебя просто не создалась эта табличка.
Запусти до этого момента:
Цитата(laent @  21.5.2007,  16:03 Найти цитируемый пост)
CREATE TABLE k_contract
(
    contract_num    NUMERIC(6)    IDENTITY PRIMARY KEY,
    contract_date    DATETIME DEFAULT GETDATE(),
    contract_type    CHAR(1)
        CHECK (contract_type IN ('A','B','C')),
    firm_num    NUMERIC(6)    NOT NULL,
    staff_num    NUMERIC(6),
CONSTRAINT fk_contract_firm_num    FOREIGN KEY (firm_num)
        REFERENCES k_firm (firm_num),
CONSTRAINT fk_contract_staff_num FOREIGN KEY (staff_num)
        REFERENCES k_staff (staff_num)
)


Вернее, чтоб и это запустилось.
А потом просто сделай 
Код

select * from k_contract




--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
laent
Дата 21.5.2007, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 21.5.2007

Репутация: 1
Всего: 1



Теперь выдают такую ошибку:
Код

Server: Msg 1753, Level 16, State 1, Line 67
Column 'k_staff.staff_num' is not the same length as referencing column 'k_contract.staff_num' in foreign key 'fk_contract_staff_num'.
Server: Msg 1750, Level 16, State 1, Line 67
Could not create constraint. See previous errors.
 

PM MAIL   Вверх
Golda
Дата 21.5.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: нет
Всего: 42



Ну, собственно, то что и показывает сообщение об ошибке. Поле k_staff.staff_num, на которое пытается ссылаться таблица k_contract, чтобы создать foreign key, не того размера ( k_staff.staff_num - NUMERIC(10), а k_contract.staff_num NUMERIC(6)). Поэтому не получается создать foreign key.

Приведите размеры этих полей в соответствие, и эта ошибка уйдет


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
LSD
Дата 21.5.2007, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



laent, и на будущее, в данном разделе указание СУБД обязательно (кроме случаев когда вопрос не привязан к типу СУБД).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
laent
Дата 22.5.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 21.5.2007

Репутация: 1
Всего: 1



Цитата(LSD @  21.5.2007,  22:24 Найти цитируемый пост)
и на будущее, в данном разделе указание СУБД обязательно (кроме случаев когда вопрос не привязан к типу СУБД). 

Хорошо учту.
PM MAIL   Вверх
laent
Дата 22.5.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 21.5.2007

Репутация: 1
Всего: 1



Помогите пожалуйста составить ещё два представления, для выше описанной базы.

Одно я уже сделал:
Код

--------------------------------/* "ПРЕДСТАВЛЕНИЯ" */--------------------
CREATE VIEW k_contract1
    AS
        SELECT  k_contract.contract_num, k_contract.contract_date,
                      k_contract.contract_type, k_contract.firm_num, k_staff.staff_name
          FROM   k_contract INNER JOIN
                      k_staff ON k_contract.staff_num = k_staff.staff_num
                                       WHERE dept_num  = 10
-----------------------------------------------------
SELECT * FROM k_contract1
-----------------------------------
 
PM MAIL   Вверх
SergeBS
Дата 22.5.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



laent
Цитата
Хорошо учту. 

Не заметно, что учел.
PM MAIL   Вверх
laent
Дата 22.5.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 21.5.2007

Репутация: 1
Всего: 1



MS SQL Server 2000
PM MAIL   Вверх
SergeBS
Дата 24.5.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



laent
Не понимаю, в чем проблема. Открываем Enterprise manager, свою базу. Там выбираем view и правой кнопкой мыша - new view. И рисуем что надо. А готовый скрипт получаем бонусом. Помимо готовой вьюшки.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1057 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.