제 질문은 : 많은 테이블에 MvrId를 넣고 있음을 주목하십시오. 아래의 다음에 대한 귀하의 견해는 무엇입니까? 어떻게 개선 할 수 있습니까? 나에게 책을 가르키면 나는 희망을 품는다. 전체 내용을 보려면 MedicalVariance라는 데이터베이스에서이 스크립트를 실행할 수 있습니다.데이터베이스 설계 SQL
USE MedicalVariance;
--This is a quick install script
--I guess you could even execute this from the front end but that would be overkill
--Because of the audience that will install this software are DBA's
IF EXISTS
(
--The query below will will evaluate to true if it finds a foreign key constraint.
SELECT 1 From INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE LIKE 'FOREIGN KEY'
)
BEGIN
DECLARE @TableName NVARCHAR(100)
DECLARE @ConstraintName NVARCHAR(100)
DECLARE @DynamicSQLEXEC NVARCHAR(300)
--DECLARE AND FEED THE CURSOR DATA
Declare ConstraintCursor CURSOR FAST_FORWARD FOR
-- Dont worry I wont drop your precious FOREIGN KEYS since the catalog must be MedicalVariance
SELECT TABLE_NAME,CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE LIKE 'FOREIGN KEY'
AND
CONSTRAINT_CATALOG LIKE 'MedicalVariance'
--OPEN THE CURSOR
OPEN ConstraintCursor
FETCH NEXT FROM ConstraintCursor
INTO @TableName, @ConstraintName
--NOW IMPLEMENT THE LOGIC TO DROP ALL CONSTRAINTS
WHILE @@FETCH_STATUS =0
BEGIN
--DYNAMIC SQL IS A PAIN IF YOU THINK YOU GOT BETTER SYNTAX GO FOR IT
SET @DynamicSQLEXEC ='ALTER TABLE '-- the space is important
SET @DynamicSQLEXEC [email protected] + @TableName + ' '
SET @DynamicSQLEXEC [email protected] + 'DROP CONSTRAINT '
SET @DynamicSQLEXEC [email protected] + @ConstraintName
PRINT @DynamicSQLEXEC -- make sure this is correct sql syntax
EXEC(@DynamicSQLEXEC)
-----------------------Dynamic SQL ENDS-------------------------------------
FETCH NEXT FROM ConstraintCursor
INTO @TableName, @ConstraintName
END;
CLOSE ConstraintCursor
DEALLOCATE ConstraintCursor
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMeds'
)
BEGIN
DROP TABLE MvrMeds
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'Mvr'
)
BEGIN
DROP TABLE dbo.Mvr
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMedsAdminRoute'
)
BEGIN
DROP TABLE dbo.MvrMedsAdminRoute
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMedsPrescribingErrors'
)
BEGIN
DROP TABLE dbo.MvrMedsPrescribingErrors
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMedsTranscribingErrors'
)
BEGIN
DROP TABLE dbo.MvrMedsTranscribingErrors
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMedsProductIssuesErrors'
)
BEGIN
DROP TABLE dbo.MvrMedsProductIssuesErrors
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMedsProcumentErrors'
)
BEGIN
DROP TABLE dbo.MvrMedsProcumentErrors
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMedsDispensingErrors'
)
BEGIN
DROP TABLE dbo.MvrMedsDispensingErrors
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMedsAdministrationErrors'
)
BEGIN
DROP TABLE dbo.MvrMedsAdministrationErrors
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrMedsDocumentationErrors'
)
BEGIN
DROP TABLE dbo.MvrMedsDocumentationErrors
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrEmployees'
)
BEGIN
DROP TABLE dbo.MvrEmployees
END;
GO
IF EXISTS
(
SELECT 1 FROM Information_Schema.Tables
WHERE Table_Name = 'MvrCommunicationErrors'
)
BEGIN
DROP TABLE dbo.MvrCommunicationErrors
END;
GO
-- The way I am putting MvrId in almost every table
-- Do you recommend it or bless it as good desing?
CREATE TABLE Mvr
(
MvrId INT NOT NULL PRIMARY KEY
)
CREATE TABLE MvrMedsAdminRoute
(
MvrMedsAdminRouteId INT NOT NULL PRIMARY KEY,
MvrId INT
)
CREATE TABLE MvrMeds
(
MvrMedsId INT NOT NULL PRIMARY KEY,
MvrId INT ,
MvrMedsAdminRouteId INT ,
CONSTRAINT MvrMeds_Mvr_FK FOREIGN KEY(MvrId) REFERENCES dbo.Mvr(MvrID),
CONSTRAINT MvrMeds_MvrMedsAdminRoute_FK FOREIGN KEY (MvrMedsAdminRouteId) REFERENCES dbo.MvrMedsAdminRoute(MvrMedsAdminRouteId)
)
CREATE TABLE MvrMedsPrescribingErrors
(
MvrPrescribingErrorId INT NOT NULL PRIMARY KEY,
MvrMedsId INT ,
MvrId INT
CONSTRAINT MvrMedsPrescribingErrors_MvrMeds_FK FOREIGN KEY (MvrMedsId) REFERENCES dbo.MvrMeds(MvrMedsId)
)
CREATE TABLE MvrMedsTranscribingErrors
(
MvrTranscribingErrorsId INT NOT NULL PRIMARY KEY,
MvrMedsId INT ,
MvrId INT
CONSTRAINT MvrMedsTranscribingErrors_MvrMeds_FK FOREIGN KEY (MvrMedsId) REFERENCES dbo.MvrMeds(MvrMedsId)
)
CREATE TABLE MvrMedsProductIssuesErrors
(
MvrTranscribingErrorsId INT NOT NULL PRIMARY KEY,
MvrMedsId INT ,
MvrId INT
CONSTRAINT MvrMedsProductIssuesErrors_MvrMeds_FK FOREIGN KEY (MvrMedsId) REFERENCES dbo.MvrMeds(MvrMedsId)
)
CREATE TABLE MvrMedsProcumentErrors
(
MvrProcumentErrorsId INT NOT NULL PRIMARY KEY,
MvrMedsId INT,
MvrId INT
CONSTRAINT MvrMedsOrderingProcumentErrors_MvrMeds_FK FOREIGN KEY (MvrMedsId) REFERENCES dbo.MvrMeds(MvrMedsId)
)
CREATE TABLE MvrMedsDispensingErrors
(
MvrDispensingErrorsId INT NOT NULL PRIMARY KEY,
MvrMedsId INT,
MvrId INT
CONSTRAINT MvrMedsDispensingErrors_MvrMeds_FK FOREIGN KEY (MvrMedsId) REFERENCES dbo.MvrMeds(MvrMedsId)
)
CREATE TABLE MvrMedsAdministrationErrors
(
MvrAdministrationErrorsId INT NOT NULL PRIMARY KEY,
MvrMedsId INT,
MvrId INT
CONSTRAINT MvrMedsAdministrationErrors_MvrMeds_FK FOREIGN KEY (MvrMedsId) REFERENCES dbo.MvrMeds(MvrMedsId)
)
CREATE TABLE MvrMedsDocumentationErrors
(
MvrDocumentationErrorsId INT NOT NULL PRIMARY KEY,
MvrMedsId INT,
MvrId INT
CONSTRAINT MvrMedsDocumentationErrors_MvrMeds_FK FOREIGN KEY (MvrMedsId) REFERENCES dbo.MvrMeds(MvrMedsId)
)
----EMPLOYEES
--ONLY EMPLOYEES CAN BE PART OF MVR?
CREATE TABLE MvrEmployees
(
MvrEmployeesId INT PRIMARY KEY,
MvrId INT,
CONSTRAINT MvrEmployees_Mvr_FK FOREIGN KEY (MvrId) REFERENCES dbo.Mvr(MvrId)
)
CREATE TABLE MvrCommunicationErrors
(
MvrCommunicationErrorsId INT NOT NULL PRIMARY KEY,
MvrEmployeesId INT,
MvrId INT,
CONSTRAINT MvrCommunicationErrors_MvrEmployees_FK FOREIGN KEY (MvrEmployeesId) REFERENCES dbo.MvrEmployees(MvrEmployeesId)
)
에
MvrId
이 절대적으로 필요하므로 다른 한편으로는 동일하지 않습니다MvrMedsPrescribingErrors
에MvrId
년대를 저장할 수있는 경우 질문, 방대한 양의 코드를 버리고 사람들이 생각하는 것을 묻지 마십시오. 다른 사람들이 이해할 수있는 구체적인 질문을하십시오. –모든 테이블이 핵심 개체와 관련되어 있으면 모든 테이블의 특정 필드에 문제가 없습니다. 그 이상으로 나는 무엇을 말할 지 모르겠다. ... – mellamokb
고맙다. 나는 특정 질문을했다. 문제는 mellamokb가 말한 것처럼 모든 테이블에 특정 필드를 넣는 것에 대해 어떻게 생각 하느냐입니다. 이 코드는 참고 용일뿐입니다. – hidden