I'm using E.F db first and I have two tables :
User details :
CREATE TABLE [dbo].[detailsUtilisateur]
(
[idDetailsUtilisateur] INT IDENTITY (1, 1) NOT NULL,
[nomUtilisateur] VARCHAR (30) NULL,
[prenomUtilisateur] VARCHAR (30) NULL,
[compagnieNom] VARCHAR (30) NULL,
[noTelephone] NCHAR (10) NULL,
[adresse] VARCHAR (40) NULL,
[ville] VARCHAR (30) NULL,
[pays] VARCHAR (30) NULL,
[etat] VARCHAR (30) NULL,
[codePostal] NCHAR (6) NULL,
CONSTRAINT [pk_idDetailsUtilisateur]
PRIMARY KEY CLUSTERED ([idDetailsUtilisateur] ASC),
CONSTRAINT [fk_idDetailsUtilisateur]
FOREIGN KEY ([idDetailsUtilisateur]) REFERENCES [dbo].[Utilisateur] ([idUtilisateur])
);
User
CREATE TABLE [dbo].[Utilisateur]
(
[idUtilisateur] INT IDENTITY (1, 1) NOT NULL,
[email] VARCHAR (30) NOT NULL,
[mdp] VARCHAR (90) NOT NULL,
CONSTRAINT [pk_utilisateur]
PRIMARY KEY CLUSTERED ([idUtilisateur] ASC),
UNIQUE NONCLUSTERED ([email] ASC)
);
I'm trying to add a user, then his details. But I get an error:
Referential mapping on the column idDetailsUtilisateur.
I don't understand because the table detailsUtilisateur had a column idDetailsUtilisateur which is a primary key and a foreign key, why did I get this error? Thank you
Related
CREATE TABLE DUser (
[ID] INT NOT NULL, [DUser_Id] VARCHAR(45) NULL,
[Name] VARCHAR (70) NOT NULL,
[DOB] DATE NOT NULL,
[Password] VARCHAR (30) NOT NULL,
[Email] VARCHAR (70) NOT NULL,
[Phone_Number] INT NOT NULL,
[Gender] VARCHAR (6) NOT NULL, PRIMARY KEY CLUSTERED ([ID] ASC) );
Create TRIGGER DUser_IDColumn
ON DUser
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE duserid SET
DUser_ID = 'U' + LEFT('0000' + CAST(inserted.ID AS VARCHAR(10)), 5) FROM DUser duserid
INNER JOIN inserted
ON duserid.ID = inserted.ID
END GO
The ID starts at U00000, when I want it to start from U00003, as there are pre-defined values.
PLEASE I NEED HELP!!
When I Create an user account
Looks like you need to reseed your AUTO-INCREMENT like below using ALTER statement
ALTER TABLE DUser AUTO_INCREMENT = 1
From your posted code, I don't see that it's a autoincrement column at all. Then there is no way you can expect it to start from 1. It's looks like custom identity column.
CREATE TABLE DUser (
[ID] INT NOT NULL
Can't you, in you script where you create the table "DUser" put something like
`AUTO_INCREMENT=3`
?
So It will be something like
CREATE TABLE DUser (
[ID] INT NOT NULL,
[DUser_Id] VARCHAR(45) NULL,
[Name] VARCHAR (70) NOT NULL,
[DOB] DATE NOT NULL,
[Password] VARCHAR (30) NOT NULL,
[Email] VARCHAR (70) NOT NULL,
[Phone_Number] INT NOT NULL,
[Gender] VARCHAR (6) NOT NULL, PRIMARY KEY CLUSTERED ([ID] ASC) )
ENGINE=InnoDB AUTO_INCREMENT=3;
I'm trying to insert new text book records into a a database. I have a Course table with columns ID (PK), CourseID, CourseTitle.
textBook table (all columns, ID (PK)) is a many to many relationship so multiple courses can have the same book and courses can also have multiple different books.
When I try to insert a new text book into my database using C# I get an error on my foreign key. The Course table is parent, Textbook table is child. The ID column in both tables is set to identity and auto increments. ID is my foreign key in my textBook table referencing the Course table.
here is my intermediate table.
CREATE TABLE [dbo].[BookCourse]
(
[cID] INT NOT NULL Unique,
[BookID] INT NOT NULL Unique,
[BookCourseID] INT NOT NULL,
CONSTRAINT [PK_BookCourse] PRIMARY KEY ([BookCourseID])
)
here is my textBook table
CREATE TABLE [dbo].[textBooks] (
[thirteenISBN] VARCHAR (255) NOT NULL,
[CourseID] VARCHAR (50) NOT NULL,
[BookTitle] VARCHAR (255) NULL,
[Ancillary] VARCHAR (255) NULL,
[BookActive] VARCHAR (20) NULL,
[ActiveDate] VARCHAR (50) NULL,
[InactiveDate] VARCHAR (50) NULL,
[Author] VARCHAR (255) NULL,
[Imprint] VARCHAR (100) NULL,
[Publisher] VARCHAR (100) NULL,
[EditionAndDate] VARCHAR (120) NULL,
[tenISBN] VARCHAR (255) NULL,
[VendorISBN] INT NULL,
[ebookAvailable] VARCHAR (50) NULL,
[eISBN] VARCHAR (255) NULL,
[Notes] VARCHAR (255) NULL,
[BookID] INT IDENTITY (1, 1) NOT NULL,
CONSTRAINT [PK_textBooks] PRIMARY KEY CLUSTERED ([BookID] ASC),
CONSTRAINT [FK_textBooks_ToTable] FOREIGN KEY ([BookID]) REFERENCES [BookCourse]([BookID])
);
Here is my Course Table
CREATE TABLE [dbo].[Course] (
[CourseID] VARCHAR (50) NOT NULL,
[CourseTitle] VARCHAR (255) NULL,
[cID] INT IDENTITY (1, 1) NOT NULL,
CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED ([cID] ASC),
CONSTRAINT [FK_Course_ToTable] FOREIGN KEY ([cID]) REFERENCES [BookCourse]([cID])
);
Table Adapters with Insert:
JUTDMSTableAdapters.textBooksTableAdapter bookTableAdapter;
bookTableAdapter = new JUTDMSTableAdapters.textBooksTableAdapter();
JUTDMSTableAdapters.CourseTableAdapter courseTableAdapter;
courseTableAdapter = new JUTDMSTableAdapters.CourseTableAdapter();
courseTableAdapter.Insert( CourseID: txtCourseID.Text, CourseTitle: txtCourseTitle.Text);
bookTableAdapter.Insert( thirteenISBN: txt13ISBN.Text, CourseID: txtCourseID.Text, BookTitle: txtBookTitle.Text, Ancillary: txtAncillary.Text,
BookActive: txtBookActive.Text, ActiveDate: txtActiveDate.Text, InactiveDate: txtInactiveDate.Text, Author: txtAuthor.Text,
Imprint: txtImprint.Text, Publisher: txtPublisher.Text, EditionAndDate: txtEditionDate.Text,
VendorISBN: vendISBN, tenISBN: txt10ISBN.Text, ebookAvailable: txtEBookAvailable.Text, eISBN: txtEISBN.Text, Notes: txtNotes.Text);
I figured in my Course table adapter insert I wouldn't have to add the cID column seeing as it is auto increment but I get this error:
Additional information: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Course_ToTable". The conflict occurred in database "F:\HUTDMS V-2.0\HUTDMS V-2.0\APP_DATA\HUTDMS.MDF", table "dbo.BookCourse", column 'cID'.
BookID in the textbook table is autoincrement
cID in the Course table is autoincrement
BookCourseID in the BookCourse table is autoincrement.
For many-to-many relationship you need to use three tables, Book table, Course table and then intermediate table - BookCourse table. Book table refers BookCourse, Course Table refers BookCourse. There are NOT direct references between Book and Course tables
You first add book into Book table, then Course into Course table, finally you add the pair (CourseID, BookID) into BookCourse table.
As for BookCourse table, you may add composite primary key (CourseID, BookID), or add identity key BookCourseID, but if latter then you need to make sure there are no duplicates - you can create an unique constraint.
https://en.wikipedia.org/wiki/Many-to-many_(data_model)
I am in the process of building the website for the Linq, and the way that I need is to use Foreign keys to precisely set the same with my users table.ยจ
I have assured me that my Tabler has a primary key because it must be unique content that use grab.
Its a brugere table
CREATE TABLE [dbo].[brugere] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[username] NVARCHAR (255) NOT NULL,
[password] NVARCHAR (255) NOT NULL,
CONSTRAINT [PK_brugere] PRIMARY KEY ([Id]),
CONSTRAINT [FK_brugere_ToPoint] FOREIGN KEY ([Id]) REFERENCES [pointantal]([brugerid]),
CONSTRAINT [FK_brugere_ToKunde] FOREIGN KEY ([Id]) REFERENCES [KundeData]([brugerid])
);
Poinantal its here
CREATE TABLE [dbo].[pointantal] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[point] INT NOT NULL,
[omrade] NVARCHAR (255) NOT NULL,
[datotid] DATETIME DEFAULT (getdate()) NOT NULL,
[brugerid] INT NOT NULL,
CONSTRAINT [PK_pointantal] PRIMARY KEY ([Id])
);
and KundeData table here
CREATE TABLE [dbo].[KundeData] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Adresse] NVARCHAR (255) NOT NULL,
[Postnr] INT NOT NULL,
[Mobil] INT NOT NULL,
[Byen] NVARCHAR (255) NOT NULL,
[abonnementsId] INT NOT NULL,
[BuyDate] DATETIME DEFAULT (getdate()) NOT NULL,
[prisid] INT NOT NULL,
[HaevedeId] NVARCHAR (255) NULL,
[brugerid] INT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
The error message I receive when I try to updater content is here
Update cannot proceed due to validation errors.
Please correct the following errors and try again.
SQL71516 :: The referenced table '[dbo].[pointantal]' 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. SQL71516 :: The referenced table
'[dbo].[KundeData]' 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.
A foreign key can only reference a primary key or unique column. You can either add a unique constraint to the columns that you are referencing:
CREATE TABLE [dbo].[pointantal] (
...
CONSTRAINT AK_BrugerID UNIQUE(brugerid)
Or you can change your constraint to actually reference the primary key in your tables:
CONSTRAINT [FK_brugere_ToPoint] FOREIGN KEY ([Id]) REFERENCES [pointantal]([Id])
However, it seems like you really want the brugerid column of the pointantal and KundeData tables to access an Id (which is a unique column) in the brugere table. In this case, you put the foreign key on those tables and have it access the primary key of the bruger table. The following code runs sucessfully on my system:
CREATE TABLE [dbo].[brugere] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[username] NVARCHAR (255) NOT NULL,
[password] NVARCHAR (255) NOT NULL,
CONSTRAINT [PK_brugere] PRIMARY KEY ([Id])
);
CREATE TABLE [dbo].[pointantal] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[point] INT NOT NULL,
[omrade] NVARCHAR (255) NOT NULL,
[datotid] DATETIME DEFAULT (getdate()) NOT NULL,
[brugerid] INT NOT NULL,
CONSTRAINT [PK_pointantal] PRIMARY KEY ([Id]),
CONSTRAINT [FK_point_ToBrugere] FOREIGN KEY ([brugerid]) REFERENCES [brugere]([Id])
);
a foreign key is a field (or collection of fields) in one table that
uniquely identifies a row of another table. In simpler words, the
foreign key is defined in a second table, but it refers to the primary
key in the first table.
Try:
1>Change the Reference column
CREATE TABLE [dbo].[pointantal] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[point] INT NOT NULL,
[omrade] NVARCHAR (255) NOT NULL,
[datotid] DATETIME DEFAULT (getdate()) NOT NULL,
[brugerid] INT NOT NULL,
CONSTRAINT [PK_pointantal] PRIMARY KEY ([Id])
);
CREATE TABLE [dbo].[KundeData] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Adresse] NVARCHAR (255) NOT NULL,
[Postnr] INT NOT NULL,
[Mobil] INT NOT NULL,
[Byen] NVARCHAR (255) NOT NULL,
[abonnementsId] INT NOT NULL,
[BuyDate] DATETIME DEFAULT (getdate()) NOT NULL,
[prisid] INT NOT NULL,
[HaevedeId] NVARCHAR (255) NULL,
[brugerid] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Id])
);
CREATE TABLE [dbo].[brugere] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[username] NVARCHAR (255) NOT NULL,
[password] NVARCHAR (255) NOT NULL,
CONSTRAINT [PK_brugere] PRIMARY KEY ([Id]),
CONSTRAINT [FK_brugere_ToPoint] FOREIGN KEY ([Id]) REFERENCES [pointantal]([Id]),
CONSTRAINT [FK_brugere_ToKunde] FOREIGN KEY ([Id]) REFERENCES [KundeData]([Id])
);
2>Change The Primary-Key
CREATE TABLE [dbo].[pointantal] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[point] INT NOT NULL,
[omrade] NVARCHAR (255) NOT NULL,
[datotid] DATETIME DEFAULT (getdate()) NOT NULL,
[brugerid] INT NOT NULL,
CONSTRAINT [PK_pointantal] PRIMARY KEY ([brugerid])
);
CREATE TABLE [dbo].[KundeData] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Adresse] NVARCHAR (255) NOT NULL,
[Postnr] INT NOT NULL,
[Mobil] INT NOT NULL,
[Byen] NVARCHAR (255) NOT NULL,
[abonnementsId] INT NOT NULL,
[BuyDate] DATETIME DEFAULT (getdate()) NOT NULL,
[prisid] INT NOT NULL,
[HaevedeId] NVARCHAR (255) NULL,
[brugerid] INT NOT NULL,
PRIMARY KEY CLUSTERED ([brugerid])
);
CREATE TABLE [dbo].[brugere] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[username] NVARCHAR (255) NOT NULL,
[password] NVARCHAR (255) NOT NULL,
CONSTRAINT [PK_brugere] PRIMARY KEY ([Id]),
CONSTRAINT [FK_brugere_ToPoint] FOREIGN KEY ([Id]) REFERENCES [pointantal]([brugerid]),
CONSTRAINT [FK_brugere_ToKunde] FOREIGN KEY ([Id]) REFERENCES [KundeData]([brugerid])
);
I have two table Users and Appointements.
In the User table I got the following fields:
Id_user, email, lastName, FirstName, hash, salt.
I put a CONSTRAINT [UNQ_email] UNIQUE NONCLUSTERED ([email] ASC).
In the Appointement I got the following fields:
Id_Appointement, doctorName, date_App, time_App, patientLstName, patientFirstName, patientFirstName, IsAvailable, email.
I put a CONSTRAINT [fk_emailPatient] FOREIGN KEY ([emailPatient]) REFERENCES [dbo].[User] ([email])
I will like to do something similar to this but with the lastName and FirstName.
Any idea on how to do this since there are not a KEY. Which constraint I can put in this case?
Here are the table definitions:
CREATE TABLE [dbo].[Users] (
[Id_user] INT IDENTITY (1, 1) NOT NULL,
[email] NVARCHAR (50) NOT NULL,
[hash] NVARCHAR (50) NOT NULL,
[salt] NVARCHAR (50) NOT NULL,
[lastName] NVARCHAR (50) NULL,
[firstName] NVARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([Id_user] ASC),
CONSTRAINT [UNQ_email] UNIQUE NONCLUSTERED ([email] ASC)
);
CREATE TABLE [dbo].[Apointement] (
[Id_Appointement] INT IDENTITY (1, 1) NOT NULL,
[doctor] NVARCHAR (50) NOT NULL,
[dateApp] DATE NOT NULL,
[heureApp] TIME (7) NOT NULL,
[patientLstName] NVARCHAR (50) NULL,
[patientFirstName] NVARCHAR (50) NULL,
[IsAvailable] BIT NULL,
[email] NVARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([rdvId] ASC),
CONSTRAINT [fk_emailPatient] FOREIGN KEY ([emailPatient]) REFERENCES [dbo].[Users] ([email])
);
I will like to add a constraint on lastName and firstName but these can be NOT unique since we can have to person with the same lastname and firstname but with a different email address.
Thanks
It may be a simple/specific question but I really need help on that. I have two tables: Entry and Comment in a SQL Server database. I want to show comment count in entry table. And of course comment count will increase when a comment is added. Two tables are connected like this:
Comment.EntryId = Entry.Id
Entry table:
CREATE TABLE [dbo].[Entry] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Subject] NVARCHAR (MAX) NOT NULL,
[Content] NVARCHAR (MAX) NOT NULL,
[Type] NVARCHAR (50) NOT NULL,
[SenderId] NVARCHAR (50) NOT NULL,
[Date] DATE NOT NULL,
[Department] NVARCHAR (50) NULL,
[Faculty] NVARCHAR (50) NULL,
[ViewCount] INT DEFAULT ((0)) NOT NULL,
[SupportCount] INT DEFAULT ((0)) NOT NULL,
[CommentCount] INT DEFAULT ((0)) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
Comment table:
CREATE TABLE [dbo].[Comment] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[EntryId] INT NOT NULL,
[SenderId] NVARCHAR (50) NOT NULL,
[Date] DATETIME NOT NULL,
[Content] NVARCHAR (MAX) NOT NULL,
[SupportCount] INT NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
I am showing the entries in a gridview in codebehind (c#). The question is this, what should I write as a query to do this most efficiently? Thanks for help.
Try this:
select e.Id,e.date,count(*) as NumComments
from Entry e
join comment c on c.entryId=e.id
group by e.id,e.date
If there might be no comments, try the following
select e.Id,e.date,count(c.entryId) as NumComments
from Entry e
left join comment c on c.entryId=e.id
group by e.id,e.date
You can use left join for that purpose. Kindly me more specific with what fields you want in gridview
And why do you want commentcount in table (most tables have that 1-many relation and we didn't use that). If you keep that in table you have to update entry table every time when comment is made.