Проектирование структуры БД в формате XML

Структура базы данных (SQL):

employee — сотрудник
— id
— headId — его непосредственный руководитель
— firstName — имя
— lastName — фамилия
— salary — размер зарплаты
— departmentId — отдел

department — отдел
— id
— name — название отдела

project — проект
— id
— name — название проекта

role — роль сотрудника в проекте
— id
— projectId
— employeeId
— name — название роли

Пожалуйста, спроектируйте оптимальную структуру в формате XML,
в которой можно представить данные из вышеописанной базы.

Вариант:

<?xml version="1.0"?>
<StructureDB>
  <Project>
    <Id>1</Id>
    <Name>Project 1</Name>
  </Project>
  <Department>
    <Id>1</Id>
    <Name>Department 1</Name>
  </Department>
  <Employee>
    <Id>1</Id>
    <HeadId>1</HeadId>
    <FirstName>FirstName</FirstName>
    <LastName>LastName</LastName>
    <Salary>123</Salary>
    <DepartmentId>
      <Id>1</Id>
      <Name>Department 1</Name>
    </DepartmentId>
  </Employee>
  <Role>
    <Id>1</Id>
    <ProjectId>
      <Id>1</Id>
      <Name>Project 1</Name>
    </ProjectId>
    <employeeId>
      <Id>1</Id>
      <HeadId>1</HeadId>
      <FirstName>FirstName</FirstName>
      <LastName>LastName</LastName>
      <Salary>123</Salary>
      <DepartmentId>
        <Id>1</Id>
        <Name>Department 1</Name>
      </DepartmentId>
    </employeeId>
    <Name>Role</Name>
  </Role>
</StructureDB>

Пример класса, создающего XML заданной структуры БД:

using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Xml.Serialization;

namespace ConsoleAppStructureDB
{

    /// <summary>
    /// 
    /// </summary>
    /// 
    [DataContract]
    [XmlRoot("StructureDB"), Serializable]
    public class StructureDB
    {
        [XmlElement("Project")]
        public List<Project> Project;

        [XmlElement("Department")]
        public List<Department> Department;

        [XmlElement("Employee")]
        public List<Employee> Employee;

        [XmlElement("Role")]
        public List<Role> Role;
    }

    /// <summary>
    ///
    /// </summary>
    /// 
    [DataContract(Name = "StructureDB")]
    public class Project
    {
        /// <summary>
        /// 
        /// </summary>
        /// 
        [DataMember]
        public int Id { get; set; }

        /// <summary>
        /// 
        /// </summary>
        /// 
        [DataMember]
        public string Name { get; set; }
    }

    /// <summary>
    ///
    /// </summary>
    /// 
    [DataContract(Name = "StructureDB")]
    public class Department
    {
        /// <summary>
        /// 
        /// </summary>
        /// 
        [DataMember]
        public int Id { get; set; }

        /// <summary>
        /// 
        /// </summary>
        /// 
        [DataMember]
        public string Name { get; set; }
    }

    /// <summary>
    /// сотрудник
    /// </summary>
    /// 
    [DataContract(Name = "StructureDB")]
    public class Employee
    {
        /// <summary>
        /// ид
        /// </summary>
        /// 
        [DataMember]
        public int Id { get; set; }

        /// <summary>
        /// его непосредственный руководитель
        /// </summary>
        /// 
        [DataMember]
        public int? HeadId { get; set; }

        /// <summary>
        /// имя
        /// </summary>
        /// 
        [DataMember]
        public string FirstName { get; set; }

        /// <summary>
        /// фамилия
        /// </summary>
        /// 
        [DataMember]
        public string LastName { get; set; }

        /// <summary>
        /// размер зарплаты
        /// </summary>
        /// 
        [DataMember]
        public decimal? Salary { get; set; }

        /// <summary>
        /// отдел
        /// </summary>
        /// 
        [DataMember]
        public Department DepartmentId { get; set; }
    }

    /// <summary>
    /// роль сотрудника в проект
    /// </summary>
    /// 
    [DataContract(Name = "StructureDB")]
    public class Role
    {
        /// <summary>
        /// ид
        /// </summary>
        /// 
        [DataMember]
        public int Id { get; set; }

        /// <summary>
        /// Проект
        /// </summary>
        /// 
        [DataMember]
        public Project ProjectId { get; set; }

        /// <summary>
        /// сотрудник
        /// </summary>
        /// 
        [DataMember]
        public Employee employeeId { get; set; }

        /// <summary>
        /// название роли
        /// </summary>
        /// 
        [DataMember]
        public string Name { get; set; }
    }

    /// <summary>
    /// 
    /// </summary>
    /// 
    class Program
    {
        static void Main(string[] args)
        {
            var ns = new XmlSerializerNamespaces();

            ns.Add("", "");

            var ListProject = new List<Project>();

            var project = new Project { Id = 1, Name = "Project 1" };

            ListProject.Add(project);

            var department = new Department { Id = 1, Name = "Department 1" };

            var ListDepartment = new List<Department>();

            ListDepartment.Add(department);

            var ListEmployee = new List<Employee>();

            var employee = new Employee { Id = 1, HeadId = 1, FirstName = "FirstName", LastName = "LastName", Salary = 123, DepartmentId = department };

            ListEmployee.Add(employee);

            var ListRole = new List<Role>();

            var role = new Role { Id = 1, Name = "Role", employeeId = employee, ProjectId = project };

            ListRole.Add(role);

            var structureDB = new StructureDB { Project = ListProject, Department = ListDepartment, Employee = ListEmployee, Role = ListRole };

            var xmlSerializer = new XmlSerializer(structureDB.GetType());

            var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\StructureDB.xml";
            FileStream file = File.Create(path);

            xmlSerializer.Serialize(file, structureDB, ns);
            file.Close();
        }
    }
}

Tags: ,

Comments are closed.