The main functions of the system are filling / editing / deleting database tables and searching by database.

All tables, except for status and scientist, are, as it were, reference books - they are filled separately from "Scientist".

For example, "summary_scientific_work" - stores the ID of the scientific work and the corresponding scientist.

The subtables of the Education table are broken down so as to prevent typos for later searching by database.

What can be simplified / improved by adhering to all NFs?

DB structure

  • In order to say that it can be corrected, it is necessary to fully understand the original task and all the technological processes at which the system will be used. For example, I don’t understand why a university is listed in education, but it doesn’t indicate the specialty for which this specialist was trained - Mike
  • The domain is not described from the word at all. change the notation at least for such i.imgur.com/Hz7lyyU.jpg so that the foreign keys can be seen. work and research are different things? in general, you can come from 4 objects - a scientist, education, scientific work, all kinds of game like teachers (nakuya?). - des1roer
  • @ des1roer Works and studies are certainly different things. under the works usually published materials are understood. They may be based on several studies, but the link with TC studies is probably not needed. According to teachers, etc. since they are, it means that they are needed by the CU or the customer, because it is in its subject area. so it's not for us to judge their necessity - Mike
  • @ZhiV In general, I don’t see any crime in your model, all that is being offered at the moment in the answers makes the model worse. Improving is not clear where. The only thing - a long chain of university-department specialty strains. Perhaps a part should be arranged in the form of a tree, who knows what depth the hierarchy will still appear there. Without an understanding of the subject area is impossible to say more - Mike

2 answers 2

enter image description here

education is probably logical to make one table with foreign keys on directories (faculty, city, name)

for the reference book it is not necessary to create 100,500 tables if there are 3 lines (vocational school, university, school).

it is possible to make a field for an ancestor in the work_all table (though I don’t know how right it is academically, but in real life it works with a bang)

something total has no right to life. This duplication and violation of the principles of normalization. all sum is given using views

  • For some reason you have thrown out the table of education, so if a person has two higher ones, then it is impossible to lay down. Judging by the CU model, a university is understood as specific educational institutions. So the name does not need to be taken out of it because there the values ​​of "MSU", "MSTU", etc. And for some reason you have transformed this name into a directory of types of educational institutions. - Mike
  • a person can finish the MGU twice - in the afternoon and in the evening. - des1roer
  • and this is exactly the directory as in VK i.imgur.com/InhRLeD.jpg - des1roer
  • I get it now. But then it is not clear why faculties are separate from institutions. Usually they say "He graduated from the faculty of beekeeping of the machine-building institute", i.e. There is always a link between the faculty and its institute. But for some reason, the CU believes it is enough for the task to be an institution. And faculties, etc. just as a reference book "what happens at this institute in general" hangs - Mike

I certainly don’t know the amount of data that will be stored in the scientist table, so my suggestion might be bad in terms of performance. But I would make the field teacher_id inside the scientist table. And naturally, I would get rid of the teacher_pupil table.

  • Once such a table is created, then most likely one specialist may have several teachers, and with your proposal it will be impossible to store it - Mike
  • @Mike Yes. Did not take into account multiple connections. - RoulanD