SQL: Creating Multiple Foreign Key and Constraints - mysql

I'm attempting to create a table, but it has 5 foreign keys and am having trouble sorting it out. Haven't used constraints either and keep getting error "foreign key constraint is incorrectly formed" Here's the table:
CREATE TABLE wines(
wine_ID CHAR(7),
color_code CHAR(1),
country_code CHAR(6),
grape_variety_code CHAR(9),
region_code CHAR(4),
vineyard_code CHAR(8),
wine_name VARCHAR(100),
price VARCHAR(5),
PRIMARY KEY (wine_ID),
CONSTRAINT FK_reColors FOREIGN KEY (color_code) REFERENCES refColors(color_code),
CONSTRAINT FK_refCountry FOREIGN KEY (country_code) REFERENCES refCountry(country_code),
CONSTRAINT FK_refGrapeVariety FOREIGN KEY (grape_variety_code) REFERENCES refGrapeVariety(grape_variety_code),
CONSTRAINT FK_refRegions FOREIGN KEY (region_code) REFERENCES refRegions(region_code),
CONSTRAINT FK_refVineyard FOREIGN KEY (vineyard_code) REFERENCES refVineyard(vineyard_code)
);

CREATE TABLE wines(
wine_ID CHAR(7) IDENTITY(1,1) NOT NULL,,
color_code CHAR(1) NULL,
country_code CHAR(6) NULL,
grape_variety_code CHAR(9) NULL,
region_code CHAR(4) NULL,
vineyard_code CHAR(8) NULL,
wine_name VARCHAR(100) NULL,
price VARCHAR(5)NULL,
CONSTRAINT [PK_Contact] PRIMARY KEY CLUSTERED
(
[wine_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[refColors] WITH CHECK ADD CONSTRAINT [FK_reColors] FOREIGN KEY([color_code])
REFERENCES [dbo].[refColors] ([color_code])
GO
....
Add also other FKs like this

Related

Error 150 : table couldn't be created

Where am I going wrong? I get the error 150 debit_card table couldn't be created. Something to do the foreign keys i know, just don't know what exactly. Help?
create table customer(
cust_id int auto_increment,
first_name varchar(25),
last_name varchar(25),
street varchar(25),
city varchar(25),
state char(2),
zip varchar(10),
CONSTRAINT customer_pk primary key(cust_id)
);
create table card_account(
acct_no char(16),
exp_date date,
card_type ENUM("Debit","Credit") not null,
CONSTRAINT card_account_pk primary key(acct_no,exp_date)
);
create table debit_card(
bank_no char(9) not null,
acct_no char(16),
exp_date date,
CONSTRAINT debit_card_pk primary key(acct_no,exp_date),
CONSTRAINT debit_card_acct_no_fk foreign key(acct_no) references card_account(acct_no) on delete cascade,
CONSTRAINT debit_card_exp_date_fk foreign key(exp_date) references card_account(exp_date) on delete cascade
);
Your card_account table has a composite primary key. You cannot use those columns separately in a foreign key constraint.
But you can add a foreign key referencing to the composite primary key:
create table debit_card(
bank_no char(9) not null,
acct_no char(16),
exp_date date,
CONSTRAINT debit_card_pk primary key(acct_no,exp_date),
CONSTRAINT debit_card_acct_no_fk foreign key(acct_no,exp_date) references card_account(acct_no,exp_date) on delete cascade
);

Exporting foreign key from many to many relationship to another table sql

I've a table
CREATE TABLE [dbo].[CoursesOfferedToBatches] (
[CourseId] VARCHAR (50) NOT NULL,
[Batch] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Batch] ASC, [CourseId] ASC),
CONSTRAINT [FK_OfferedCourses_ToCourses] FOREIGN KEY ([CourseId]) REFERENCES [dbo].[Courses] ([Id]),
CONSTRAINT [FK_CoursesOfferedToBatches_ToBatches] FOREIGN KEY ([Batch]) REFERENCES [dbo].[Batches] ([Id])
);
When I export CourseId as foreign key from above table into below table as shown below, it gives error shown below after table
CREATE TABLE [dbo].[StudentsRegisterToCoursesOffered]
(
[StudentId] UNIQUEIDENTIFIER NOT NULL ,
[CourseId] VARCHAR(50) NOT NULL,
PRIMARY KEY ([CourseId], [StudentId]),
CONSTRAINT [FK_StudentsRegisterToCoursesOffered_ToStudents] FOREIGN KEY ([StudentId]) REFERENCES [Students]([StudentId]),
CONSTRAINT [FK_StudentsRegisterToCoursesOffered_ToCoursesOffered] FOREIGN KEY ([CourseId]) REFERENCES [CoursesOfferedToBatches]([CourseId])
)
Error:
Update cannot proceed due to validation errors. Please correct the
following errors and try again.
SQL71516 :: The referenced table '[dbo].[CoursesOfferedToBatches]'
contains no primary or candidate keys that match the referencing
column list in the foreign key. If the referenced column is a computed
column, it should be persisted.
My question finishes here but for reference I'm adding all relevant tables:
CREATE TABLE [dbo].[Courses] (
[Id] VARCHAR (50) NOT NULL,
[Name] VARCHAR (100) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE TABLE [dbo].[Students] (
[StudentId] UNIQUEIDENTIFIER NOT NULL,
[DepartmentName] VARCHAR (50) NOT NULL,
[Address] VARCHAR (250) NULL,
[TwitterLink] VARCHAR (100) NULL,
[FacebookLink] VARCHAR (100) NULL,
[MemberSince] DATETIME NULL,
[ProfileViews] BIGINT DEFAULT ((0)) NULL,
[CNIC] CHAR (15) NULL,
[AboutMe] VARCHAR (3000) NULL,
PRIMARY KEY CLUSTERED ([StudentId] ASC),
CONSTRAINT [FK_Students_ToStudents] FOREIGN KEY ([StudentId]) REFERENCES [dbo].[Users] ([UserId]),
CONSTRAINT [FK_Students_ToDepartments] FOREIGN KEY ([DepartmentName]) REFERENCES [dbo].[Departments] ([Name])
);
CREATE TABLE [dbo].[Batches] (
[Id] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
The table CoursesOfferedToBatches needs to have its own primary key, which you have created as a compound key PRIMARY KEY CLUSTERED ([Batch] ASC, [CourseId] ASC). It is this compound key that would be a foreign key in StudentsRegisterToCoursesOffered and not just the CourseId.

Cannot add foreign key constraint 2

im try create a foreign key to Poblacion, on table cp_cliente, but i cant, i take the error "cannot add foreign key", im try change the name, but i cant. If i delete Poblacion foreign key the script work fine.
CREATE TABLE provincias (
Cod_provincia INT(2) PRIMARY KEY,
Provincia VARCHAR(50) NOT NULL
);
CREATE TABLE cp_cliente (
CP CHAR(5),
Cod_provincia INT(2),
Poblacion VARCHAR(70),
PRIMARY KEY (CP, Poblacion, Cod_provincia),
FOREIGN KEY (Cod_provincia) REFERENCES provincias(Cod_provincia) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE cliente (
DNI CHAR(9) PRIMARY KEY,
Nombre VARCHAR(20) NOT NULL,
Apellidos VARCHAR(20) NOT NULL,
Direccion VARCHAR(50) NOT NULL,
CP CHAR(5),
Cod_provincia INT(2),
Poblacion VARCHAR(70),
FOREIGN KEY (CP) REFERENCES cp_cliente(CP) ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (Cod_provincia) REFERENCES cp_cliente(Cod_provincia) ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (Poblacion) REFERENCES cp_cliente(Poblacion) ON DELETE SET NULL ON UPDATE CASCADE
);
What is the problem? I can't see him :(
Sorry my bad english.

SQL Server 2008 Foreign Key Constraint Error

I am creating a database with series of tables ddls, and in all are 13 tables. I am getting a foreign key constraint error when I run the ddl for TBNSOR_VICTIM table. The ddl was able to create the first fk constraint but I get an error creating the second fk constraint. Can somebody help me out or point me to what am missing in the scripts? This is the error am getting after running the ddl scripts
Msg 1776, Level 16, State 0, Line 2
There are no primary or candidate keys in the referenced table 'dbo.TBNSOR_OFFENSE' that match the referencing column list in the foreign key 'RD09RD03'
CREATE TABLE [dbo].[TBNSOR_OFFENSE](
[RD03_RC27SEQ_NBR] [int] NOT NULL,
[FK_RD01_RC17SID] [int] NOT NULL,
[RD03_RC27OFFENSE_DESC] [varchar] (100) NULL,
[RD03_STATUTE] [char](6) NULL,
[RD03_RC27PREDATOR_IND] [char] (1) NULL,
[RD03_RC27CONVICTION_DT] [date] NULL,
[RD03_RC27CONVICT_CITY] [varchar] (20) NULL,
[RD03_RC27CONVICT_STATE] [char] (2) NULL,
[RD03_RC27CONVICT_COUNTY] [varchar] (20) NULL,
[RD03_RC27CITY] [varchar] (20) NULL,
[RD03_RC27COUNTY] [varchar] (20) NULL,
[RD03_RC27OFFENSE_STATE] [char] (2) NULL,
[RD03_RC27OFFENSE_DATE] [date] NULL,
[RD03_RC27CONFIN_REL_DT] [date] NULL,
[RD03_RC27PP_RELEASE_DT] [date] NULL,
CONSTRAINT [CJ38ID03] PRIMARY KEY CLUSTERED
(
[RD03_RC27SEQ_NBR] ASC,
[FK_RD01_RC17SID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[TBNSOR_OFFENSE] WITH CHECK ADD CONSTRAINT [RD03RD01] FOREIGN KEY([FK_RD01_RC17SID])
REFERENCES [dbo].[TBNSOR_PHYSCSC] ([RD01_RC17SID])ON DELETE CASCADE
GO
ALTER TABLE [dbo].[TBNSOR_OFFENSE] CHECK CONSTRAINT [RD03RD01]
GO
CREATE TABLE [dbo].[TBNSOR_VICTIM](
[RD09_RC28SEQ_NUM] [int] NOT NULL,
[FK_RD01_RC17SID] [int] NOT NULL,
[FK_RD03_RC27SEQ_NBR] [int] NOT NULL,
[RD09_RC28SEX] [char] (1) NULL,
[RD09_RC28RACE] [char] (1) NULL,
[RD09_RC28AGE] [char](2) NULL,
[RD09_RC28HIGH_AGE] [char] (2) NULL,
[RD09_RC28LOW_AGE] [char] (2) NULL,
CONSTRAINT [CJ38ID09] PRIMARY KEY CLUSTERED
(
[RD09_RC28SEQ_NUM] ASC,
[FK_RD01_RC17SID] ASC,
[FK_RD03_RC27SEQ_NBR] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[TBNSOR_VICTIM] WITH CHECK ADD CONSTRAINT [RD09RD01] FOREIGN KEY([FK_RD01_RC17SID])
REFERENCES [dbo].[TBNSOR_PHYSCSC] ([RD01_RC17SID])ON DELETE CASCADE
GO
ALTER TABLE [dbo].[TBNSOR_VICTIM] CHECK CONSTRAINT [RD09RD01]
GO
ALTER TABLE [dbo].[TBNSOR_VICTIM] WITH CHECK ADD CONSTRAINT [RD09RD03] FOREIGN KEY([FK_RD03_RC27SEQ_NBR])
REFERENCES [dbo].[TBNSOR_OFFENSE]([RD03_RC27SEQ_NBR])ON DELETE CASCADE
GO
ALTER TABLE [dbo].[TBNSOR_VICTIM] CHECK CONSTRAINT [RD09RD03]
GO
You have primary key set up on two columns ([RD03_RC27SEQ_NBR] and [FK_RD01_RC17SID]) in [CJ38TBNSOR_OFFENSE] table, but your referencing just one of them.
It should be:
REFERENCES [cj38].[CJ38TBNSOR_OFFENSE]([RD03_RC27SEQ_NBR],[FK_RD01_RC17SID])

Dropping tables mySql

I am having terrible trouble figuring out the order these tables should be dropped in for my script I will post the script now, If anyone could help with the order they should be dropped in it would be a great help
drop table Registered_Student;
drop table EducateYou_VideoRating;
drop table EducateYou_Video;
drop table EducateYou_Violation;
drop table EducateYou_Member;
drop table Violation_Type;
drop table EducateYou_Comment;
drop table EducateYou_FollowList;
drop table EducateYou_Group;
drop table EducateYou_Admin;
commit;
create table EducateYou_Violation
(
violationId number (9),
violationStatus char(1) DEFAULT 'X',
videoId number(9),
groupId number (9),
commentId number(9),
CONSTRAINT pk_violationId PRIMARY KEY (violationId),
CONSTRAINT fk_x_videoId FOREIGN KEY (videoId) REFERENCES EducateYou_Video,
CONSTRAINT fk_y_groupId FOREIGN KEY (groupId) REFERENCES EducateYou_Group,
CONSTRAINT fk_z_commentId FOREIGN KEY (commentId) REFERENCES EducateYou_Comment
);
create table EducateYou_Video(
videoId number(9),
videoRef varchar2(50) NOT NULL,
videoTitle varchar2(15) NOT NULL,
uploadDate DATE NOT NULL,
videoStatus char(1) DEFAULT 'X',
videoCategory varchar2(15) NOT NULL,
regNo number(6) NOT NULL,
AdminId number(9),
commentId number(9),
CONSTRAINT pk_videoId PRIMARY KEY (videoId),
CONSTRAINT fk_r_regNo FOREIGN KEY (regNo) REFERENCES EducateYou_Member,
CONSTRAINT fk_p_AdminId FOREIGN KEY (AdminId) REFERENCES EducateYou_Admin,
CONSTRAINT fk_n_commentId FOREIGN KEY (commentId) REFERENCES EducateYou_Comment
);
create table EducateYou_VideoRating(
rating number(2) NOT NULL,
regNo number(9),
videoId number(9),
CONSTRAINT pk_video_rating PRIMARY KEY (videoId, regNo),
CONSTRAINT fk_x_videoId FOREIGN KEY (videoId) REFERENCES EducateYou_Video,
CONSTRAINT fk_z_regNo FOREIGN KEY (regNo) REFERENCES EducateYou_Member
);
create table EducateYou_Admin
(
AdminId number(9),
firstName varchar2(15),
surname varchar2(15),
adminActions varchar2(40),
CONSTRAINT pk_AdminId PRIMARY KEY (AdminId)
);
create table EducateYou_Group(
groupID number(5) NOT NULL,
groupname varchar2(15) NOT NULL,
regNo number(6) NOT NULL,
CONSTRAINT pk_groupID PRIMARY KEY (groupID),
CONSTRAINT fk_i_regNo FOREIGN KEY (regNo) REFERENCES EducateYou_Member
);
create table EducateYou_Comment(
commentId number(9),
commentStatus char(1) DEFAULT 'A',
commentTime timestamp,
counter number(5) DEFAULT 5,
educateYouComment varchar2(50),
regNo number(6) NOT NULL,
CONSTRAINT pk_commentId PRIMARY KEY (commentId),
CONSTRAINT fk_b_regNo FOREIGN KEY (regNo) REFERENCES EducateYou_Member
);
create table EducateYou_FollowList(
followListID number(9),
regNo number(9),
CONSTRAINT pk_followListID PRIMARY KEY (followListID),
CONSTRAINT fk_z_regNo FOREIGN KEY (regNo) REFERENCES EducateYou_Member
);
create table Violation_Type
(
violation_TypeId varchar2(9),
violationId number(9),
CONSTRAINT pk_violation_TypeId PRIMARY KEY (violation_TypeId, violationId ),
CONSTRAINT fk_m_violationId FOREIGN KEY (violationId) REFERENCES EducateYou_Violation
);
create table EducateYou_Member
(
regNo number(6),
status char(1) DEFAULT 'A',
collegeId varchar2(9) NOT NULL,
CONSTRAINT pk_regNo PRIMARY KEY (regNo),
CONSTRAINT fk_l_collegeId FOREIGN KEY (collegeId) REFERENCES Registered_Student
);
create table Registered_Student
(
collegeId varchar2(9),
password varchar2(9) NOT NULL,
firstname varchar2(20) NOT NULL,
surname varchar2(20) NOT NULL,
dob date NOT NULL,
street varchar2(25) NOT NULL,
town varchar2(10) NOT NULL,
county varchar2(15) NOT NULL,
college varchar2(30) NOT NULL,
course varchar2(10) NOT NULL,
CONSTRAINT pk_collegeId PRIMARY KEY (collegeId)
);
Drop Table Syntax
Add SET FOREIGN_KEY_CHECKS = 0; in beginning to ignore the foreign key constraints while deleting the tables and use a single Drop command for all tables as once with CASCADE Option as below:
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS Registered_Student,
IF EXISTS EducateYou_VideoRating,
IF EXISTS EducateYou_Video,
IF EXISTSEducateYou_Violation,
IF EXISTS EducateYou_Member,
IF EXISTS Violation_Type,
IF EXISTS EducateYou_Comment,
IF EXISTS EducateYou_FollowList,
IF EXISTS EducateYou_Group,
IF EXISTS EducateYou_Admin
CASCADE;
Alternatively, drop all the constraints first and then drop the tables.