我创建了一个类图,希望将其转换为sql server 2008中的数据库。我使用关系和外键实现了CREATE脚本,但是当我尝试在线对其进行编译(https://www.eversql.com/sql-syntax-check-validator/)时,我总是同样的错误: 您的SQL语法有误;似乎出现了错误:第18行的'CREATE TABLE CONTRAT(CONTRAT_ID INT PRIMARY KEY,Num_CONTRAT VARCHAR(50)N')
您能帮我从图中验证数据库吗?
SQL代码:
CREATE TABLE CLIENT
(
Client_ID INT PRIMARY KEY,
Type_Client VARCHAR(25) NOT NULL CHECK (Type_Client IN('Physique', 'Morale')),
Date_creation_client DATETIME NOT NULL,
CIN INT NULL,
Nom Varchar(40) NULL,
Prenom Varchar(40) NULL,
Sexe Varchar(20) NULL,
Tel INT NULL,
Date_Naissance DATE NULL,
Etat_civil Varchar(20) NULL,
Nationalite Varchar(40) NULL,
Adresse Varchar (50) NULL,
Ville Varchar (20) NULL,
Titre Varchar (50) NULL,
Nature_juridique Varchar(20) NULL,
ID_SIRET Varchar(40) NULL
);
CREATE TABLE CONTRAT
(
CONTRAT_ID INT PRIMARY KEY,
Num_CONTRAT VARCHAR(50) NOT NULL,
Type_CONTRAT Varchar(40),
Flotant Varchar(4) NOT NULL CHECK (Flotant IN('Oui', 'Non')),
Resilie Varchar(4) NOT NULL CHECK (Resilie IN('Oui', 'Non')),
Date_souscription DATE NULL,
Dte_effet DATE NULL,
Fractionnement VARCHAR(25) NOT NULL CHECK (Fractionnement IN('trimestriel', 'semestriel','annuel')),
Fk_COMPAGNY_ID INT FOREIGN KEY REFERENCES COMPAGNIES(COMPAGNY_ID)
);
CREATE TABLE QUITANCE
(
QUITANCE_ID INT PRIMARY KEY,
Echeance DATE NOT NULL,
Prime_net DECIMAL NULL,
Taxe DECIMAL NULL,
DATE_Creation DATE NOT NULL,
FK_CONTRAT_ID INT UNIQUE FOREIGN KEY REFERENCES CONTRAT(CONTRAT_ID),
FK_Client_ID INT UNIQUE FOREIGN KEY REFERENCES Client(Client_ID)
);
CREATE TABLE OBJET_ASSURE
(
OBJET_ID INT PRIMARY KEY,
Type_objet VARCHAR(25) NOT NULL;
Marque_automobile VARCHAR(25) NULL,
Immatriculation_automobile VARCHAR(25) NULL,
Puissance_automobile VARCHAR(25) NULL,
valeur_automobile VARCHAR(25) NULL,
destination_voyage VARCHAR(25) NULL,
Debut_voyage DATE NULL,
Fin_voyage DATE NULL,
Adresse_incendie VARCHAR(25) NULL,
valeur_incendie VARCHAR(25) NULL,
age_assurance_vie INT NULL,
dossier_medical_exist VARCHAR(4) NULL CHECK (dossier_medical_exist IN('Oui', 'Non')),
Fk_CONTRAT_ID INT FOREIGN KEY REFERENCES CONTRAT(CONTRAT_ID)
);
CREATE TABLE COMPAGNIES
(
COMPAGNY_ID INT PRIMARY KEY,
Nom VARCHAR(25) NOT NULL;
Adresse VARCHAR(25)
);
CREATE TABLE Encaissement
(
ID_Encaissement INT PRIMARY KEY,
DATE_JOURNEE DATE NOT NULL,
type VARCHAR(20) NOT NULL CHECK (type IN('Espece', 'Cheque')),
type2 VARCHAR(2) NOT NULL CHECK (type2 IN('C', 'T', 'R')),
Montant Decimal NOT NULL,
FK_CONTRAT_ID INT UNIQUE FOREIGN KEY REFERENCES CONTRAT(CONTRAT_ID),
FK_QUITANCE_ID INT UNIQUE FOREIGN KEY REFERENCES QUITANCE(QUITANCE_ID),
);
CREATE TABLE Feuille_Encaissement
(
ID_Feuille INT PRIMARY KEY,
DATE_JOURNEE DATE NOT NULL,
statut VARCHAR(20) NOT NULL CHECK (type IN('ouverte', 'fermee')),
Total_CE DECIMAL NOT NULL,
Total_TE DECIMAL NOT NULL,
Total_CC DECIMAL NOT NULL,
Total_TC DECIMAL NOT NULL,
Total_ES DECIMAL NOT NULL,
Total_CH DECIMAL NOT NULL,
);
编辑1:
由于@Larnu,我更正了语法错误: Updated Script
我还将图表更新为: Updated diagram
如您所见,“ Feuille_Encaissement”是多个“ Encaissement”的集合(确切地说,“ Feuille_Encaissement”使用日期字段“ Date_journee”具有0..4“ Encaissement”)。如何在SQL中实现呢?还有其他解决方案吗?我要将所有“ Encaissement”行都存储到“ date_journee”等价的“ Feuille_Encaissement”中。
编辑2:
所以我想做的是:
*实施一项Cron作业,以创建一个每天带有日期列“ date_journee”的“ Feuille_Encaissement”,并获取所有“ Encaissement”对象,其中Feuille_Encaissement.date_journée== Encaissement.date_journee
进行计算并填写“ Feuille_Encaissement”列
最后,我想要一个页面,其日期包含“ Feuille_Encaissement”列和该日期的所有“ Encaissement”数据。