There are several different ways to count the number of LinesOfCode in StructuredQueryLanguage. ---- Here is the SQL example from the ManyToManyChallenge. [DeleteMe: Some spaces have been deleted for consistency; the number of lines has not been changed.] CREATE TABLE Users ( user_id INTEGER NOT NULL PRIMARY KEY, username VARCHAR NOT NULL, CONSTRAINT UNIQUE (username)); CREATE TABLE Groups ( group_id INTEGER NOT NULL PRIMARY KEY, group_name VARCHAR, CONSTRAINT UNIQUE (group_name)); CREATE TABLE r_user_groups ( user_id INTEGER NOT NULL, group_id INTEGER NOT NULL, CONSTRAINT PRIMARY KEY (user_id, group_id), CONSTRAINT FOREIGN KEY (user_id) REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FOREIGN KEY (group_id) REFERENCES groups ON DELETE CASCADE ON UPDATE CASCADE ) CREATE INDEX r_user_groups_idx1 ON r_user_groups (group_id); If a complete SQL query is considered to be a line of code, this example has 4 lines of code. If the code is formatted as shown above, and each non-blank line as formatted is considered to be a line of code, this example has 16 lines of code. ---- If each constraint or action is formatted on its own line, the code looks like this: CREATE TABLE Users ( user_id INTEGER NOT NULL PRIMARY KEY, username VARCHAR NOT NULL, CONSTRAINT UNIQUE (username)); CREATE TABLE Groups ( group_id INTEGER NOT NULL PRIMARY KEY, group_name VARCHAR, CONSTRAINT UNIQUE (group_name)); CREATE TABLE r_user_groups ( user_id INTEGER NOT NULL, group_id INTEGER NOT NULL, CONSTRAINT PRIMARY KEY (user_id, group_id), CONSTRAINT FOREIGN KEY (user_id) REFERENCES users ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT FOREIGN KEY (group_id) REFERENCES groups ON DELETE CASCADE ON UPDATE CASCADE ) CREATE INDEX r_user_groups_idx1 ON r_user_groups (group_id); If a complete SQL query is considered to be a line of code, this example still has only 4 lines of code. If the code is formatted as shown above, and each non-blank line as formatted is considered to be a line of code, this example has 30 lines of code. ---- I prefer to have much of the schema setups in meta-data (See DataDictionary) and use a GUI tool and/or table browser rather than code for such. In fact, I think that is how it is usually stored. Code is just one representation. See CodeAvoidance. ---- See also: ManyToManyChallenge, SemiColon, LinesOfCode ---- CategoryMetrics